我正在尝试为给定的产品制作输入和输出权重的组合列表。但是,作为非IT人员,我的SQL技能相当有限。我正在使用excel创建与SQL服务器的连接,并发送查询以获取我想要的数据。
数据库:
我的数据库位于Microsoft SQL 2012服务器上,因此我必须使用T-SQL进行查询。
我的桌子:
制品
|------------|-------------|---------------|-----------|---------|-----------|----------|
| PrimaryID | PrimaryName | Primaryweight | SubID | OrderID | SubWeight | CutTime |
|------------|-------------|---------------|-----------|---------|-----------|----------|
| P0000001 | NameOne | 1234 | S00000001 | 12345 | 123 | datetime |
| P0000001 | NameOne | 1234 | S00000002 | 12346 | 234 | datetime |
| P0000001 | NameOne | 1234 | S00000003 | 12347 | 345 | datetime |
| P0000002 | NameOne | 1235 | S00000004 | 12345 | 456 | datetime |
| P0000002 | NameOne | 1235 | S00000005 | 12346 | 567 | datetime |
| P0000002 | NameOne | 1235 | S00000006 | 12347 | 678 | datetime |
| P0000003 | NameTwo | 2345 | S00000007 | 12335 | 789 | datetime |
| P0000003 | NameTwo | 2345 | S00000008 | 12336 | 321 | datetime |
| P0000004 | NameTwo | 2346 | S00000009 | 12335 | 432 | datetime |
| P0000004 | NameTwo | 2346 | S00000010 | 12336 | 543 | datetime |
| P0000005 | NameThree | 3456 | S00000011 | 12355 | 654 | datetime |
| P0000005 | NameThree | 3456 | S00000012 | 12356 | 765 | datetime |
| P0000005 | NameThree | 3456 | S00000013 | 12357 | 876 | datetime |
|------------|-------------|---------------|-----------|---------|-----------|----------|
命令
|---------|------------|
| OrderID | ProdLaneID |
|---------|------------|
| 12335 | 1 |
| 12336 | 2 |
| 12345 | 1 |
| 12346 | 2 |
| 12347 | 3 |
| 12355 | 1 |
| 12356 | 2 |
| 12357 | 3 |
|---------|------------|
我想要的是:
输出包括
PrimaryID
产品类型
PrimaryWeight
SubWeightLine1(如果SubID已发送到ProdLaneID 1,则为SubWeight,否则为NULL)
SubWeightLine2(如果SubID已发送到ProdLaneID 2,则为SubWeight,否则为NULL)
SubWeightLine3(如果SubID已发送到ProdLaneID 3,则为SubWeight,否则为NULL)
输出表
|-----------|-------------|---------------|----------------|----------------|----------------|
| PrimaryID | ProductType | Primaryweight | SubWeightLine1 | SubWeightLine2 | SubWeightLine3 |
|-----------|-------------|---------------|----------------|----------------|----------------|
| P0000001 | NameOne | 1234 | 123 | 234 | 345 |
| P0000002 | NameOne | 1235 | 456 | 567 | 678 |
| P0000003 | NameTwo | 2345 | 789 | 321 | |
| P0000004 | NameTwo | 2346 | 432 | 543 | |
| P0000005 | NameThree | 3456 | 654 | 765 | 876 |
|-----------|-------------|---------------|----------------|----------------|----------------|
我的问题:
如何列出每个唯一的PrimaryID及其PrimaryWeight和相应的SubWeight与ProdLineID匹配(如表所示)?
所有尝试使用SELECT DISTINCT的各种组合进行功能查询,CASE WHEN ELSE END和JOIN并且没有工作。
关于如何实现这一目标的任何意见将不胜感激。
使用条件聚合和外连接
select PrimaryId,
PrimaryName as ProductType,
PrimaryWeight,
max(case when o.prodlaneid = 1 then p.subweight end) SubWeightLine1,
max(case when o.prodlaneid = 2 then p.subweight end) SubWeightLine2,
max(case when o.prodlaneid = 3 then p.subweight end) SubWeightLine3
from product p
left join orders o on p.orderid = o.orderid
group by PrimaryId, PrimaryName, PrimaryWeight