T-SQL:使用基于在Excel查询中列为子列的重复项的值进行的不同选择

问题描述 投票:0回答:1

我正在尝试为给定的产品制作输入和输出权重的组合列表。但是,作为非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并且没有工作。

关于如何实现这一目标的任何意见将不胜感激。

sql excel tsql
1个回答
1
投票

使用条件聚合和外连接

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
© www.soinside.com 2019 - 2024. All rights reserved.