将多行转换为一行 - SQL

Cam*_*mus 1 sql t-sql sql-server string-aggregation

我正在尝试将“测试”列放在同一行中。Stuff()但是,我正在使用,似乎“测试”列正在遍历所有 qID 我缺少什么?

SELECT DISTINCT qID,
                STUFF((
                select ',' + B.text
                from tbl B
                where B.qID=qID
                order by B.text
                for xml path('')
                ),1,1,'') as test
FROM tbl 
WHERE qID in (2258060,2296222)
GROUP BY qID
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

Atk*_*Atk 5

你在表上缺少别名

  1. 条件 B.qID=qID 总是返回真,就像 1=1 一样,它没有做任何事情。它类似于 B.qID=B.qID。

通过使用别名:

SELECT DISTINCT qID,
                STUFF((
                select ',' + B.text
                from tbl B
                where B.qID=A.qID
                order by B.text
                for xml path('')
                ),1,1,'') as test
FROM tbl A
WHERE qID in (2258060,2296222)
GROUP BY qID

Run Code Online (Sandbox Code Playgroud)

通过使用表名本身,也可以在外部查询中不使用别名。

SELECT DISTINCT qID,
                STUFF((
                select ',' + B.text
                from tbl B
                where B.qID=tbl.qID --Table name before qid here 
                order by B.text
                for xml path('')
                ),1,1,'') as test
FROM tbl
WHERE qID in (2258060,2296222)
GROUP BY qID
Run Code Online (Sandbox Code Playgroud)

  • 请不要请求OP接受答案,除非您有理由相信他们是新的并且不知道如何接受。 (3认同)
  • 我并不是说你的答案不正确,我是说要求OP接受它是不行的。 (3认同)