Группировка по дате при использовании в случае - PullRequest
1 голос
/ 21 октября 2019

У меня есть рабочий запрос, где я могу экспортировать в Excel и поворачивать себя, чтобы не группироваться по столбцу fldTrancationDateTime, и это прекрасно работает в качестве краткосрочного решения.

Является ли здесь единственной возможностью использовать сводную строку SQL, поэтому я могу группировать только по Product и заполнять каждый диапазон дат? Вместо одной строки для каждой даты? Или я собираюсь кодировать это неправильно?

declare @Date Date
set @Date = GETDATE()
print(@Date)
select T.fldProductCode, P.fldProductDescription, count(fldTransactionID), 
case when datediff(d,cast(T.fldTransactionDateTime as date),@Date ) <= 7 
    then count(fldTransactionID) else 0 end as [0-7 Days],
case when datediff(d,cast(T.fldTransactionDateTime as date),@Date ) > 7 and datediff(d,cast(T.fldTransactionDateTime as date),@Date ) <= 14
    then count(fldTransactionID) else 0 end as [7-14 Days],
case when datediff(d,cast(T.fldTransactionDateTime as date),@Date ) > 14 and datediff(d,cast(T.fldTransactionDateTime as date),@Date ) <= 21
    then count(fldTransactionID) else 0 end as [14-21 Days],
case when datediff(d,cast(T.fldTransactionDateTime as date),@Date ) > 21 and datediff(d,cast(T.fldTransactionDateTime as date),@Date ) <= 28
    then count(fldTransactionID) else 0 end as [21-28 Days],
case when datediff(d,cast(T.fldTransactionDateTime as date),@Date ) > 28 
    then count(fldTransactionID) else 0 end as [28+ Days]
 from [transaction] T
join product P on P.fldProductCode = T.fldProductCode
where T.fldTransactionSold = 0
group by  P.fldProductDescription,T.fldProductCode, cast(fldTransactionDateTime as DATE)

Output Here

1 Ответ

0 голосов
/ 21 октября 2019

Я предполагаю, что вы хотите условное агрегирование:

select T.fldProductCode, P.fldProductDescription, 
       count(fldTransactionID), 
       sum(case when datediff(day, T.fldTransactionDateTime, @Date) <= 7 
                then 1 else 0
           end) as [0-7 Days],
       sum(case when datediff(day, T.fldTransactionDateTime, @Date) between 8 and 14 
                then 1 else 0
           end) as [7-14 Days],
       sum(case when datediff(day, T.fldTransactionDateTime, @Date) between 15 and 21
                then 1 else 0
           end) as [14-21 Days],
       sum(case when datediff(day, T.fldTransactionDateTime, @Date) between 22 and 28
                then 1 else 0
           end) as [22-28 Days],

       sum(case when datediff(day, T.fldTransactionDateTime, @Date) > 28 
                then 1 else 0
           end) as [21-28 Days],
from [transaction] T join product
     P
     on P.fldProductCode = T.fldProductCode
where T.fldTransactionSold = 0
group by P.fldProductDescription, T.fldProductCode;;

Выражение case является аргументом sum(), а не наоборот.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...