这个问题以前有人问过,但在一个稍微不同的场景(一个似乎不适合我的问题),所以...
我有这样的数据
Name |Item |Note
George|Paperclip |Two boxes
George|Stapler |blue one
George|Stapler |red one
George|Desk lamp |No light bulb
Mark |Paperclip |One box 2"
Mark |Paperclip |One box 4"
Mark |Block Notes|a blue one
..? |..? |..?
我希望按名称进行透视,以获得
Name |Paperclip|Stapler|Desk Lamp|Block Notes
George| 1| 2| 1| NULL
Mark | 2| NULL | NULL | 1
我已经跟随像Convert Rows to columns using 'Pivot' in SQL Server的例子,但我离解决方案还很远..有人能给予我一把吗?谢谢!
编辑:实际代码
drop table #temp2
SELECT DISTINCT *,
CASE WHEN Item IS NULL THEN NULL ELSE COUNT(Item) OVER(PARTITION BY Name) END CNT
INTO #TEMP2
FROM [ISPBIGFIX].[dbo].[C_INV_ErroriTavolette_v11]
DECLARE @cols NVARCHAR (MAX)
DECLARE @Columns2 NVARCHAR (MAX)
SET @cols = SUBSTRING((SELECT DISTINCT ',['+Item+']' FROM #TEMP2 GROUP BY Item FOR XML PATH('')),2,8000)
SET @Columns2 = SUBSTRING((SELECT DISTINCT ',ISNULL(['+Item+'],0) AS ['+Item+']' FROM #TEMP2 GROUP BY Item FOR XML PATH('')),2,8000)
DECLARE @query NVARCHAR(MAX)
SET @query = 'SELECT Name,' + @Columns2 + ' FROM
(
SELECT Name,ErrorType,CNT FROM #TEMP2
) x
PIVOT
(
SUM(CNT)
FOR [Item] IN (' + @cols + ')
) p
WHERE Name IS NOT NULL;'
EXEC SP_EXECUTESQL @query
4条答案
按热度按时间cqoc49vn1#
试试这个,它遵循这里提到的相同的例子:Convert Rows to columns using 'Pivot' in SQL Server
mrphzbgm2#
试试这个动态SQL
sxissh063#
试试这个查询(我认为它更清楚)。我使用KashifQureshi的代码创建一个临时表,但是我的代码在PIVOT部分是不同的
t30tvxxf4#
Kashif给出的答案是可行的。下面是一个利用STRING_AGG的版本