Sql 如何将组结果拆分为无限的单独列

Sql 如何将组结果拆分为无限的单独列,sql,sql-server-2008,Sql,Sql Server 2008,如果我有一张桌子: id tstamp x y ----------------- 1 111 1 A 2 111 2 B 3 111 3 C 4 222 1 D 5 222 2 E 6 222 3 F 7 333 1 G 8 333 2 H 9 333 3 I ... nnn ... ... 如果列的数量取决于tstamp的范围,如何

如果我有一张桌子:

id  tstamp  x   y
-----------------
1   111     1   A
2   111     2   B
3   111     3   C
4   222     1   D
5   222     2   E
6   222     3   F
7   333     1   G
8   333     2   H
9   333     3   I
... nnn     ... ...
如果列的数量取决于tstamp的范围,如何将其拆分为以下内容

x   y111    y222    y333    ynnn
----------------------------------
1   A       D       G       ...
2   B       E       H       ...
3   C       F       I       ...
它看起来基本上很简单,但我找不到任何相关的示例或API?有10个左右类似的问题,但它们都涉及字符串处理、csv、xml


我想用c#或另一种脚本语言做这件事很简单,但我认为用sql做这件事应该很简单。

您需要为PIVOT构造tstamp的列值,并使用动态查询

DECLARE @cols NVARCHAR(MAX)
SELECT  @cols = STUFF(( SELECT DISTINCT TOP 100 PERCENT
                                '],[' + tstamp
                        FROM    Table1 
                        ORDER BY '],[' + tstamp
                        FOR XML PATH('')
                      ), 1, 2, '') + ']'


DECLARE @query NVARCHAR(4000)
SET @query = N'SELECT x, '+
@cols +'
FROM
(SELECT  x, y, tstamp
FROM    Table1 
) p
PIVOT
(
MAX(y)
FOR tstamp IN
( '+
@cols +' )
) AS pvt
'

exec sp_executesql @query

你看到的答案可能是正确的。动态透视是您正在寻找的,是的,它有点复杂。谢谢,关键字透视…:)