【发布时间】:2023-03-30 23:28:01
【问题描述】:
我有一个查询用于报告目的,列出未提交季度报告的雇主和未提交的季度。这是我的查询:
with employerIds as (select distinct Employerid
from employerTransaction),
quarters as (select distinct QId
from employerTransaction)
select ei.EmployerId, e.EmployerName, q.QId
from employerIds as ei
cross join quarters as q
left join employerTransaction as et
on et.EmployerId = ei.EmployerId
and et.QId = q.QId
join employer as e
on e.EmployerId = ei.EmployerId
where et.employerid is null
group by ei.employerid, q.QId
order by ei.EmployerId, q.QId
查询结果如下:
EmployerId EmployerName QId
1 Potato Inc 20193
1 Potato Inc 20202
1 Potato Inc 20203
2 Donuts LLC 20202
2 Donuts LLC 20203
3 Pineapple Logistics 20191
3 Pineapple Logistics 20192
3 Pineapple Logistics 20193
3 Pineapple Logistics 20194
我想要的是将 QId 列合并为每个 EmployerId 的一行,如下所示:
EmployerId EmployerName QId
1 Potato Inc 20193, 20202, 20203
2 Donuts LLC 20202, 20203
3 Pineapple Logistics 20191, 20192, 20193, 20194
我正在使用 Sql Server 2016,所以很遗憾我无法利用 string_agg(),而必须使用 FOR XML 和 stuff()。我不确定如何在具有多个连接的查询上使用stuff()。感谢您提供任何帮助。
【问题讨论】:
-
您不要为此使用 STUFF 函数。为此,您可以使用 FOR XML(子)查询。 STUFF 函数仅用于通过删除前导(或尾随)分隔符来美化最终结果。
标签: sql sql-server-2016 stuff