【问题标题】:SQL Count with rollup shows totals as NULL带有汇总的 SQL 计数将总计显示为 NULL
【发布时间】:2020-05-10 02:48:38
【问题描述】:

我需要知道如何用总计替换 NULL。

这是我使用 ROLLUP 查询的副本。

SELECT    DATEPART(YEAR, study_date) AS 'Year',
          COUNT(distinct study_uid) AS 'Studies'
FROM local_studies
GROUP BY rollup (DATEPART(YEAR, study_date))
ORDER BY  'Year' DESC

这是输出:

  Year  Studies
2020    497
2019    165743
2018    165043
2017    182712
2016    210700
2015    219373
2014    214097
2013    211566
2012    212900
2011    217957
2010    213542
2009    193510
2008    95434
2007    53722
2006    44422
2005    12119
2004    129
2003    65
2000    4
NULL    2413535

我喜欢看到 'NULL' 值替换为 'Total':(如下所示)

  Year  Studies
2020    497
2019    165743
2018    165043
2017    182712
2016    210700
2015    219373
2014    214097
2013    211566
2012    212900
2011    217957
2010    213542
2009    193510
2008    95434
2007    53722
2006    44422
2005    12119
2004    129
2003    65
2000    4
Total   2413535

任何将 NULL 转换为单词 TOTAL 的建议将不胜感激。

【问题讨论】:

    标签: sql sql-server rollup


    【解决方案1】:

    我通常只使用coalesce():

    SELECT COALESCE(DATENAME(YEAR, study_date), 'Total') AS Year,
           COUNT(distinct study_uid) AS 'Studies'
    FROM local_studies
    GROUP BY rollup (DATENAME(YEAR, study_date))
    ORDER BY Year DESC;
    

    请注意,这会切换到使用DATENAME(),因此该列是字符串而不是数字。

    此外,如果该值可以是 NULL,则此方法效果不佳。为此,有GROUPING() 函数。

    【讨论】:

      【解决方案2】:
      SELECT    CASE GROUPING_ID(DATEPART(YEAR, study_date)) WHEN 1 THEN 'Total' ELSE CAST(DATEPART(YEAR, study_date) AS VARCHAR(10)) END AS 'Year',
                COUNT(distinct study_uid) AS 'Studies'
      FROM local_studies
      GROUP BY rollup (DATEPART(YEAR, study_date))
      ORDER BY  GROUPING_ID(DATEPART(YEAR, study_date)), 'Year' DESC;
      

      【讨论】:

      • 谢谢!这正是我想要的,在看到这个之前我肯定不是在正确的轨道上。
      • 不客气。它可以更简单,通过得出聚合结果..除非有 NULL 年(当然)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-03
      • 1970-01-01
      • 2020-10-22
      • 1970-01-01
      • 2019-03-24
      相关资源
      最近更新 更多