当数据具有NULL值时,如何使用SQL Server中的Pivot将多行转换为多行

Abh*_*bhi 5 c# sql sql-server pivot-table

我有一个表,我希望在某些条件下获取数据.我正在使用以下查询获取数据.

SELECT track,
       ytd,
       weekno,
       [unit] 
FROM SMIrawdataFinal 
WHERE unit IS NOT NULL AND tracktype='focus' AND track='A' AND ytd IS NOT NULL
Run Code Online (Sandbox Code Playgroud)

原始表(数据)如下所示.

track   ytd    weekno    unit
A      (Blank)   1        1
A      (Blank)   2        2
A      (Blank)   3        3
A        19      5        5
A      (Blank)   4        4
Run Code Online (Sandbox Code Playgroud)

我在sql server中使用PIVOT得到了以下数据.我的问题是如何删除空值并在一行中获取相同的数据.

autoId  track   ytd   col4   col3   col2    col1    
-------------------------------------------------
1         A   (Blank)  NULL    4      3       2  
2         A     19     5     NULL    NULL    NULL
Run Code Online (Sandbox Code Playgroud)

下面是我的SQL查询:

SELECT * 
FROM (
    SELECT track,ytd,weekno,[unit]
    FROM SMIrawdataFinal
    WHERE album = 'XYZ' 
        AND unit IS NOT NULL
        AND tracktype='focus' 
        AND track='A' 
        AND ytd IS NOT NULL
    ) as s 
PIVOT(
    SUM(unit) 
    FOR weekno in ([5],[4],[3],[2])
)AS pivot1
Run Code Online (Sandbox Code Playgroud)

小智 3

将 group by 与 SUM 结合使用以获得所需的输出:

    SELECT track, 
    SUM(ISNULL(ytd, 0)) AS [ytd], 
    SUM(ISNULL([5], 0)) AS [5],
    SUM(ISNULL([4], 0)) AS [4],
    SUM(ISNULL([3], 0)) AS [3],
    SUM(ISNULL([2], 0)) AS [2]
    FROM (SELECT track,ytd,weekno,[unit]
    FROM SMIrawdataFinal where album = 'XYZ' 
            AND unit IS NOT NULL
            AND tracktype='focus' 
            AND track='A')    as s PIVOT
    (SUM(unit) FOR weekno in ([5],[4],[3],[2]))AS pivot1
    GROUP BY track
Run Code Online (Sandbox Code Playgroud)

输出:

    track   | ytd   | 5 | 4  | 3    | 2
    --------------------------------
    A       | 19    | 5 | 4  | 3    | 2
Run Code Online (Sandbox Code Playgroud)