我的表格的列如下所示:
jobnum jobname description oncost
1 abc xxxx cost1
1 abc xxxx cost2
如何在一行中得到结果,如下所示:
jobnum jobname description oncost
1 abc xxxx cost1,Cost2
答案 0 :(得分:0)
它确实取决于特定的数据库,但是您需要对行进行分组,并汇总最后一列。以下查询应在大多数当前数据库上有效:
select jobnum, jobname, description, listagg(oncost,',')
from my_table
group by jobnum, jobname, description
答案 1 :(得分:0)
在SQL Server 2017中,您可以使用string_agg()
和GROUP BY
除oncost
以外的所有列。
SELECT t1.jobnum,
t1.jobname,
t1.description,
string_agg(t1.oncost,
',') oncost
FROM elbat t1
GROUP BY t1.jobnum,
t1.jobname,
t1.description;
对于使用子查询FOR XML
代替string_agg()
的较低版本,则是解决此类问题的典型方法。
SELECT t1.jobnum,
t1.jobname,
t1.description,
stuff((SELECT ',' + t2.oncost
FROM elbat t2
WHERE t2.jobnum = t1.jobnum
AND t2.jobname = t1.jobname
AND t2.description = t1.description
FOR XML PATH('')),
1,
1,
'') oncost
FROM elbat t1
GROUP BY t1.jobnum,
t1.jobname,
t1.description;