【发布时间】:2018-10-11 13:45:04
【问题描述】:
之前有人问过这个问题,但在一个稍微不同的情况下(似乎不适合我的问题)所以..
我的数据看起来像这样
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
【问题讨论】:
-
您能告诉我们您当前的查询吗?
-
添加了代码,但结果当然不是我想要的
-
您可以不使用从表中选择的查询,而是为#TEMP2 发布 ddl,然后发布一些插入语句,以便我们可以重现这一点?
-
“ddl”是什么意思?
-
似乎其他人已经把它放在一起了。但是ddl = data definition language。换句话说,创建表语句。
标签: sql sql-server pivot