Sql server 2005 如何在T-SQL中将多行作为一行返回?

Sql server 2005 如何在T-SQL中将多行作为一行返回?,sql-server-2005,tsql,Sql Server 2005,Tsql,几个月前,我们的供应商为我们的票务系统添加了一项功能,允许我们在票务中添加任意数量的自定义字段。出于报告的目的,我想查询这些字段以及其他调用信息,但每个可扩展字段都作为一行存储在数据库中。所以基本上你有这样的东西: ext_doc_no call_record value 1 1001 Test 2 1001 test2 3 1001 moretest

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

ext_doc_no    call_record    value
1             1001           Test
2             1001           test2
3             1001           moretest
我想查询的是:

1001    Test    test2    moretest
我尝试过使用PIVOT,但这对使用聚合函数之类的东西要求很高。关于如何做到这一点,还有其他想法吗


编辑:我还尝试将每一行分别查询到主查询中,并使用函数。。。但这两种方法都太慢了。我需要一种方法来一次获取所有行,对它们进行透视,然后加入主查询。

您要做的是透视(一些系统称之为交叉表查询)。这应该可以帮助您在谷歌上搜索其他帮助,但一般来说,在编写查询之前,您需要知道所需的列。

请参见这里的SQL 2005+

或者对于2000版

使用上面页面中的脚本

DECLARE @Values VARCHAR(1000) SELECT @Values = COALESCE(@Values + ', ', '') + Value FROM ..... WHERE .... SELECT @ValuesEND 声明@Values VARCHAR(1000) 选择@Values=COALESCE(@Values+',','')+Value 从…起 哪里 选择@ValuesEND 编辑:我不想无礼。但您可以通过搜索“将多行合并为一行”来找到这一点。

将数据作为XML返回

SELECT ...
FROM ...
...JOIN....
FOR XML AUTO
试着看一看


这正是你想要做的。

真正令人伤心的是我以前使用过这种技术。。。我责备抗生素p该页面现在是404'd