如何在T-SQL中将多行作为单行返回?

时间:2009-02-24 18:01:32

标签: sql-server-2005 tsql

几个月前,我们的供应商为我们的票务系统添加了一项功能,可让我们为票证添加任意数量的自定义字段。我想查询这些字段以及其他调用信息以进行报告,但每个可扩展字段都作为一行存储在数据库中。所以基本上你有这样的东西:

ext_doc_no    call_record    value
1             1001           Test
2             1001           test2
3             1001           moretest

我想要的是回询:

1001    Test    test2    moretest

我尝试过使用PIVOT,但这对使用聚合函数等问题要求很高。关于如何做到这一点的任何其他想法?

编辑:我也尝试将每一行分别查询到主查询中,并使用函数......但这两种方法都太慢了。我需要一些东西来同时获取所有行,PIVOT它们然后加入主查询。

5 个答案:

答案 0 :(得分:3)

尝试查看this answer

它完全符合您的要求。

答案 1 :(得分:1)

答案 2 :(得分:0)

您要做的是一个数据透视表(某些系统将其称为交叉表查询)。这应该可以帮助您获取更多帮助,但通常您需要知道在编写查询之前所期望的列。

答案 3 :(得分:0)

http://www.sqlservercentral.com/scripts/Miscellaneous/32004/

使用上页的脚本。


    DECLARE @Values VARCHAR(1000)

    SELECT  @Values = COALESCE(@Values + ', ', '') + Value
    FROM .....
    WHERE ....

    SELECT @ValuesEND

编辑:我不想粗鲁。但是你可以通过搜索“将多行组合成一个”来找到它。

答案 4 :(得分:0)

以XML格式返回数据

SELECT ...
FROM ...
...JOIN....
FOR XML AUTO