【问题标题】:Convert Multiple Rows into One - SQL将多行转换为一 - SQL
【发布时间】:2020-03-16 05:54:02
【问题描述】:

我正在尝试将“测试”列放在同一行中。我正在使用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

【问题讨论】:

    标签: sql sql-server tsql string-aggregation


    【解决方案1】:

    您在桌子上缺少别名

    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
    
    

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

    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
    

    【讨论】:

    • 请不要让 OP 接受答案,除非您有理由相信他们是新人并且不知道如何去做。
    • @DaleK 我使用他和我的查询测试了结果。
    • 我不是说你的答案不正确,我是说要求 OP 接受它是不行的。
    • 谢谢。做到了。你知道为什么没有别名它似乎可以检索所有内容吗?
    • @Camus 在您的查询中,B.qID=qID 总是返回 true,就好像 1=1,它什么也没做。它类似于 B.qID=B.qID。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多