【发布时间】:2014-09-05 10:37:04
【问题描述】:
使用查询select Size,ColorName,QNTY from tbl1。
我得到下表
现在我想得到以下格式的表格
如何使用数据透视
【问题讨论】:
标签: sql-server pivot
使用查询select Size,ColorName,QNTY from tbl1。
我得到下表
现在我想得到以下格式的表格
如何使用数据透视
【问题讨论】:
标签: sql-server pivot
试试这个:
SELECT *
FROM (SELECT Size, ColorName, Qnty
FROM YourTable)p
PIVOT (SUM(Qnty) FOR Size IN ([34],[32],[30])Pvt
为了获得动态数据透视,请使用以下查询:
DECLARE @columns NVARCHAR(1000) = '',
@sql NVARCHAR(MAX)
SELECT @Columns = STUFF((SELECT ',['+Size+']'
FROM (SELECT DISTINCT Size FROM YourTable)z
FOR XML PATH('')),1,1,'')
SET @sql = 'SELECT *
FROM (SELECT Size, ColorName, Qnty
FROM YourTable)p
PIVOT (SUM(Qnty) FOR Size IN ('+@columns+')Pvt'
EXECUTE(@sql)
【讨论】:
试试这个
方法一:
SELECT * FROM
(
SELECT Size, ColorName, Qnty
FROM Table1
)p
PIVOT
(
Max(Qnty)
FOR Size IN ([34],[32],[30])
)Pvt
方法二:
DECLARE @QuestionList nvarchar(max);
DECLARE @qry nvarchar(max);
SELECT @QuestionList = STUFF((SELECT ',['+ CAST(Size AS nVarchar(max))+']'
FROM (SELECT DISTINCT Size FROM Table1)z
FOR XML PATH('')),1,1,'')
SET @qry = 'SELECT * FROM
(SELECT ColorName, Qnty, Size FROM Table1
)X PIVOT (MAX(Qnty) FOR Size IN (' + @QuestionList + ')) pvt
ORDER BY Colorname;';
Exec sp_executesql @qry;
方法三:
SELECT ColorName,
MAX(CASE WHEN Size = 34 THEN Qnty END) AS [34],
MAX(CASE WHEN Size = 32 THEN Qnty END) AS [32],
MAX(CASE WHEN Size = 30 THEN Qnty END) AS [30]
FROM Table1
GROUP BY ColorName;
【讨论】: