SQL Счет с накоплением показывает итоги как NULL - PullRequest
0 голосов
/ 23 января 2020

Мне нужно знать, как я могу заменить 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 будет принят с благодарностью.

Ответы [ 2 ]

1 голос
/ 23 января 2020

Я обычно просто использую 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().

0 голосов
/ 23 января 2020
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;
...