我有一张桌子:
--ID----ID2----Error
1 1 A
1 2 B
1 3 A
我想要的是什么:
---ID---ErrorTypeA---ErrorTypeB---
1 2 1
我不知道有多少ErrorType,所以它们应该根据Error列中的不同值动态创建....这可能吗?
答案 0 :(得分:0)
试试这个Pivot
DECLARE @Temp AS TABLE (ID INT,ID2 INT,Error CHAR(2))
INSERT INTO @Temp
SELECT 1,1,'A' UNION ALL
SELECT 1,2,'B' UNION ALL
SELECT 1,3,'A'
SELECT Id,
MAX([ErrorTypeA]) AS [ErrorTypeA],
MAX([ErrorTypeB]) AS [ErrorTypeB]
FROM
(
SELECT *, 'ErrorType'+Error As ErrorCol FROM @Temp
) AS SRc
PIVOT
(
COUNT(ID2) FOR ErrorCol IN ([ErrorTypeA],[ErrorTypeB] )
)
AS PVT
GROUP BY Id
结果
Id ErrorTypeA ErrorTypeB
--------------------------
1 2 1
答案 1 :(得分:0)
您必须使用动态查询。首先需要准备结果集。
CREATE TABLE #Tbl (ID INT, ID2 INT, ERROR VARCHAR)
INSERT INTO #Tbl
VALUES
(1, 1, 'A'),
(1, 2, 'B'),
(1, 3, 'A')
DECLARE @ErrorTags NVARCHAR(MAX) = ''
SELECT @ErrorTags += CONCAT(',[', ERROR, ']') FROM #Tbl GROUP BY ERROR
DECLARE @Query AS NVARCHAR(MAX) = '
SELECT *
FROM
(
SELECT
ID,
ERROR,
COUNT(1) CountOfError
FROM
#Tbl
GROUP BY ID,ERROR
) SRC
PIVOT (
AVG(CountOfError)
FOR ERROR IN ('+ STUFF(@ErrorTags, 1, 1, '') +')
) PIV '
execute sp_executesql @Query
结果:
ID A B
----------- ----------- -----------
1 2 1