如何使用SQL查询散列?

时间:2019-05-15 20:52:48

标签: sql sql-server tsql transpose

我有下表

SourceTbl

FileNum    EventCode  ChargeDescrip       
510-1        DP           steal          
510-1        DP          possession          
510-2        DP          robbery          
510-2        DP           firearm          
510-2        DP           delivery          
510-3        DP          robbery          

我想基于chargedescrip列传播此数据

DestTbl

FileNum    EventCode  Charge1,     Charge2      Charge3 
510-1        DP           steal    possession     
510-2        DP          robbery   firearm      delivery
510-3        DP          robbery          

如何使用SQL查询来做到这一点?我发现我也许可以使用PIVOT子句。但是我会继续使用它。

1 个答案:

答案 0 :(得分:0)

您必须使用ROW_NUMBER并使用它来生成Charge1,Charge2,Charge3 ....列。

WITH Cases
AS (
    SELECT [FileNum]
    ,[EventCode]
    ,[ChargeDescrip]
    ,ROW_NUMBER() OVER (
        PARTITION BY [FileNum] ORDER BY [FileNum] ASC
        ) 'RN'
FROM SourceTbl
)
SELECT [FileNum]
,[EventCode]
,[1] Charge1
,[2] Charge2
,[3] Charge3
FROM Cases
pivot(max([ChargeDescrip]) FOR [RN] IN (
        [1]
        ,[2]
        ,[3]
        )) p