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

标签 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

原始表(数据)如下。

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/

相关文章:

c# - 我应该在带有日期事务的 PIVOT 中的何处放置 WHERE 子句

c# - 这种 Assert.AreSame 应该返回 true 吗?

c# - 在 C# 中对 boolean 变量进行序列化反序列化的最简单方法是什么?

sql - SQL CE select语句中的反向 bool 值(位)

c# - 执行包含 GO 语句的批处理 T-SQL 脚本会抛出异常

c# - Entity Framework 中的多对多关系有效

MySQL 从最后 N 组中选择所有行

Php日历星期随机用户计算

MySQL/SQL Server...作为一个完整的解决方案协同工作

sql-server - 我的触发器是如何被删除的?