[英]SQL Server 2008 R2 table Pivot
我有一張三列的桌子。
列color
可以是動態的,現在我有4個元素,可以得到6個或更多元素。
如何編寫查詢來做到這一點?
謝謝
使用PIVOT
。 學習SQL SERVER – PIVOT和UNPIVOT表示例
SELECT Company, red, white, blu, pink
FROM TableName
PIVOT(MAX(Value) FOR Color IN(ed, white, blu, pink))AS Piv
動態樞軸:
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX);
SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.Color)
FROM TableName c
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT Company, ' + @cols + ' from
(
select Company
, value
, color
from TableName
) x
pivot
(
max(value)
for color in (' + @cols + ')
) p '
execute(@query)
您可以像這樣使用動態sql:
CREATE TABLE #t
(
Company CHAR(3) ,
Value INT ,
color NVARCHAR(10)
)
GO
DECLARE @c NVARCHAR(MAX) = '['
DECLARE @s NVARCHAR(MAX) = ''
INSERT INTO #t
VALUES ( 'AAA', 2, 'red' ),
( 'AAA', 2, 'white' ),
( 'BBB', 2, 'white' ),
( 'BBB', 3, 'blue' ),
( 'CCC', 3, 'pink' ),
( 'FFF', 4, 'blue' )
SELECT @c = @c + color + '],['
FROM ( SELECT DISTINCT
color
FROM #t
) AS t
SELECT @c = SUBSTRING(@c, 1, LEN(@c) - 2)
SET @s = ';WITH cte AS
(
SELECT Company, Value, color FROM #t
)
SELECT Company, ' + @c + ' FROM cte
PIVOT(MAX(Value) FOR color IN(' + @c + ')) AS p'
EXEC(@s)
輸出:
Company blue pink red white
AAA NULL NULL 2 2
BBB 3 NULL NULL 2
CCC NULL 3 NULL NULL
FFF 4 NULL NULL NULL
在數據透視子句中應用適當的聚合。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.