我有一个表,我想在某些条件下从中获取数据。我正在通过以下查询获取数据。
SELECT track,
ytd,
weekno,
[unit]
FROM SMIrawdataFinal
WHERE unit IS NOT NULL AND tracktype='focus' AND track='A' AND ytd IS NOT NULL
原始表(数据)如下。
track ytd weekno unit
A (Blank) 1 1
A (Blank) 2 2
A (Blank) 3 3
A 19 5 5
A (Blank) 4 4
我在 sql server 中使用 PIVOT 获得了以下数据。我的问题是 如何删除空值并在一行中获取相同的数据。
autoId track ytd col4 col3 col2 col1
-------------------------------------------------
1 A (Blank) NULL 4 3 2
2 A 19 5 NULL NULL NULL
下面是我的 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
最佳答案
将分组依据与 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
输出:
track | ytd | 5 | 4 | 3 | 2
--------------------------------
A | 19 | 5 | 4 | 3 | 2
关于c# - 当数据具有 NULL 值时,如何在 SQL Server 中使用 Pivot 将多行转换为具有多列的一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31447005/