SQL Показать 0 значений, когда между диапазонами дат нет значений - PullRequest
0 голосов
/ 10 мая 2018

У меня есть некоторые проблемы с моим SQL-запросом.Я выбираю некоторые значения с определенным диапазоном дат.например, с 2018-05-01 по 2018-05-13 это вывод.

SUM  CalendarWeek
8    18
5    19

Если пользователь сейчас выберет дату между 2018-04-01 и 2018-05-13, я хочупоказать 0 вместо, когда нет значений.

Например:

SUM  CalendarWeek
0    13
0    14
0    15
0    16
0    17
8    18
5    19

Мой запрос:

SELECT SUM(Codes) AS 'Sum', CW FROM(
SELECT Count(*) AS 'Codes', DATEPART(wk, ScanDate) AS 'CW',
FROM [Table]
WHERE CONVERT(date, ScanDate, 102) >= '2018-01-01' AND CONVERT(date, ScanDate, 102) <= '2018-05-13' 
GROUP BY ScanDate,  DATEPART(wk, ScanDate) 
UNION ALL 
SELECT Count(*) AS 'Codes', DATEPART(wk, ScanDate) AS 'CW', ScanDate
FROM [Table_Archive] 
WHERE CONVERT(date, ScanDate, 102) >= '2018-01-01' AND CONVERT(date, ScanDate, 102) <= '2018-05-13'
GROUP BY ScanDate, DATEPART(wk, ScanDate)) test 
GROUP BY CW, ScanDate
ORDER BY CW ASC

есть идеи, как решить эту проблему?Спасибо

Ответы [ 3 ]

0 голосов
/ 10 мая 2018

Во-первых, вы должны вести таблицу календаря для такого рода задач.Если так, то используйте их.иначе нужно будет использовать рекурсивный cte

declare @stardate date, @enddate date

set @stardate = '2018-04-01' 
set @enddate = '2018-05-13'

with t as (
    select DATEPART(ISO_WEEK, @stardate) as CalendarWeek
    union all
    select CalendarWeek+1
    from t
    where CalendarWeek < DATEPART(ISO_WEEK, @enddate)
)
select t1.sum, coalesce(t.CalendarWeek, 0) CalendarWeek
from t
left join table t1 on t1.CalendarWeek = t.CalendarWeek
0 голосов
/ 10 мая 2018

Вы можете использовать IF в MySQL:

Select  IF(sum=null, 0,sum) as sum from table_name

Если вы не можете найти решение из этого, вы можете прокомментировать снова, я дам точный запрос

0 голосов
/ 10 мая 2018
SELECT ISNULL(SUM, 0), CalendarWeek
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...