具有相同表数据 SQL Server 的多个联接
Posted
技术标签:
【中文标题】具有相同表数据 SQL Server 的多个联接【英文标题】:Multiple joins with the same table data SQL Server 【发布时间】:2021-12-24 21:40:46 【问题描述】:我有一个表格数据“销售额”,其中包含按产品和商店划分的每个商店的销售额。
id | sales | shop |
---|---|---|
1 | 100.0 | 01 |
1 | 30.0 | 02 |
2 | 2.0 | 01 |
3 | 100.0 | 01 |
3 | 30.0 | 02 |
4 | 100.0 | 03 |
4 | 10.0 | 02 |
我尝试以一种格式获取数据,该格式为我提供商品 ID 和同一行中每家商店的销售额,如下所示:
id | sales1 | shop1 | sales2 | shop2 | sales3 | shop3 |
---|---|---|---|---|---|---|
1 | 100.0 | 01 | 30.0 | 02 | 0.0 | 03 |
2 | 2.0 | 01 | 0.0 | 02 | 0.0 | 03 |
3 | 100.0 | 01 | 30.0 | 02 | 0.0 | 03 |
4 | 0.0 | 01 | 10.0 | 02 | 100.0 | 03 |
我尝试将数据与 some (select * from sales where shop='01') 作为 a 进行左连接,但它不起作用,因为 ON 子句仅连接一个表,在本例中为 a。
这是 SQL 查询:
select *
from
(select *
from sales
where shop = '01') as a
left join
(select *
from sales
where shop = '02') as b on a.id = b.id
left join
(select *
from sales
where shop = '03') as c on a.id = c.id
按照这个逻辑,我丢失了数据的结果4、10.0、02,试图改变像c.id = b.id这样的ON子句加入不同的数据并给我不同的结果。
我该如何解决这个问题?
【问题讨论】:
【参考方案1】:不太清楚为什么每个商店价值都有一个列。当您拥有 Sales1、Sales2 等时,这似乎是多余的。但是通过使用条件聚合,您可以比所有这些查询更容易地解决这个问题。像这样的东西应该适合你。
select id
, Sales1 = isnull(max(case when Shop = '01' then sales end), 0)
, Shop1 = '01'
, Sales2 = isnull(max(case when Shop = '02' then sales end), 0)
, Shop2 = '02'
, Sales3 = isnull(max(case when Shop = '03' then sales end), 0)
, Shop3 = '03'
from sales
group by id
【讨论】:
酷,这给了我想要的,非常感谢以上是关于具有相同表数据 SQL Server 的多个联接的主要内容,如果未能解决你的问题,请参考以下文章
使用 SSIS 将数据加载到 SQL Server 中的多个表