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