SQL为空值和汇总重命名NULL

时间:2014-10-16 22:16:41

标签: sql rollup

我正在尝试制作一个仪表板,以优先显示打开的门票以及分配给谁。数据集如下所示:

|-------------------------|
|  Assigned  |  Priority  |
|-------------------------|
|  JOE       |  Low       |
|  JOE       |  Medium    |
|  MARY      |  High      |
|            |  Medium    |
|  TIM       |  Low       |
|  Mary      |  High      |

我想要的报告是:

|---------------------------------------------------------|
|  Employee  |  Low   |   Medium   |   High   |   Total   |
|---------------------------------------------------------|
| Total      |   2    |     2      |    2     |     6     |
| Unassigned |   0    |     1      |    0     |     1     |
|  MARY      |   0    |     0      |    2     |     2     |
|  JOE       |   1    |     1      |    0     |     2     |
|  TIM       |   1    |     0      |    0     |     1     |

我可以通过此查询获取所有内容

SELECT
    CASE WHEN Assigned is null then 'Unassigned' Else Assigned End Employee
    ,   SUM(CASE WHEN Priority = 'Low' THEN 1 ELSE 0 END) AS Low
    ,   SUM(CASE WHEN Priority = 'Medium' THEN 1 ELSE 0 END) AS Medium
    ,   SUM(CASE WHEN Priority = 'High' THEN 1 ELSE 0 END) AS High
    ,   count(Priority) AS Total
FROM table
GROUP BY Assigned WITH ROLLUP
ORDER BY Assigned ASC

然而,这种方式是将任何为NULL的内容重命名为Unassigned。这非常适合给我在“已分配”字段中没有任何人的未分配值,但是我的“总计”列也显示未分配。如何将其重命名为Total?

提前致谢!

1 个答案:

答案 0 :(得分:4)

您需要使用GROUPING,如下所示:

SQL Fiddle

SELECT
    CASE WHEN (GROUPING(Assigned) = 1) THEN 'Total'
        When Assigned is null then 'Unassigned' 
        Else Assigned End Employee
    ,   SUM(CASE WHEN Priority = 'Low' THEN 1 ELSE 0 END) AS Low
    ,   SUM(CASE WHEN Priority = 'Medium' THEN 1 ELSE 0 END) AS Medium
    ,   SUM(CASE WHEN Priority = 'High' THEN 1 ELSE 0 END) AS High
    ,   count(Priority) AS Total
FROM table1
GROUP BY Assigned WITH ROLLUP
--DER BY Assigned ASC

<强> Results

|   EMPLOYEE | LOW | MEDIUM | HIGH | TOTAL |
|------------|-----|--------|------|-------|
| Unassigned |   0 |      1 |    0 |     1 |
|        JOE |   1 |      1 |    0 |     2 |
|       MARY |   0 |      0 |    2 |     2 |
|        TIM |   1 |      0 |    0 |     1 |
|      Total |   2 |      2 |    2 |     6 |