如果我有桌子:
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中应该是一件容易的事情?
答案 0 :(得分:0)
您需要为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