首页 > 解决方案 > 将列 B 中的行复制到表 A 中列的每个类别

问题描述

DBFiddle 用于以下问题:https ://dbfiddle.uk/?rdbms=sqlserver_2019&fiddle=85a9d26620bea264c26f5584c3302f40

这是第一个名为 sample 的表:

在此处输入图像描述

这是名为 company 的第二个表:

在此处输入图像描述

我想要表样本中每个dat公司的所有公司名称

我试过这个:

`select a.Dat, a.cname, (case when a.name <> a.cname then 0 else a.cnt end) as c from 
(select s.*, c.name as cname from sample s
right join company c on c.name = s.name) a`

我明白了:

在此处输入图像描述

期望的输出:

在此处输入图像描述

如何在 MS SQL Server 中执行此操作

标签: sqlsql-server

解决方案


使用 across join生成行并使用 aleft join引入现有数据:

select d.dat, c.name, coalesce(s.cnt, 0) as cnt
from (select distinct dat from sample) d cross join 
 company c left join
 sample s
 on s.dat = d.dat and s.name = c.name;

推荐阅读