Даты и суммы группы запросов SQL Server - PullRequest
0 голосов
/ 03 апреля 2019

У меня есть эта таблица:

ID, PayDate  , ActualPayDate , Cost , Price
1 , 18-11-18 , 30-11-18      , 100  , 120
2 , 28-3-19  , 1-4-19        , 150  , 230
3 , 5-4-19   , null          , 170  , 290
4 , 5-3-19   , null          , 100  , 200

Я хочу сгруппировать PayDate по году и месяцу для столбца Cost и сгруппировать по ActualPayDate для цены, результаты должны выглядеть примерно так:

Year , Month , Cost , Price
2018 , 11    , 100  , 120
2018 , 12    , 0    , 0
2019 , 1     , 0    , 0
2019 , 2     , 0    , 0
2019 , 3     , 250  , 0
2019 , 4     , 170  , 230

Пожалуйста, помогите.

Ответы [ 2 ]

1 голос
/ 03 апреля 2019

Использование apply:

select year(v.dte), month(v.dte), coalesce(sum(v.cost), 0) as cost,
      coalesce(sum(v.price)) as price
from t cross apply
     (values (t.paydate, t.cost, 0), 
             (t.actualpaydate, 0, t.price)
     ) v(dte, cost, price)
group by year(v.dte), month(v.dte)
order by year(v.dte), month(v.dte);
0 голосов
/ 03 апреля 2019

Пожалуйста, попробуйте этот sub sql, затем присоединитесь с уменьшением времени.

with CTE as 
(
select Year(PayDate) as [Year] 
    , Month(PayDate) as [Month]
    , Sum(Cost) as [cost] 
    , Sum(Price) as Price
from table
Group by Year(PayDate), Month(PayDate)
)
Select Cte.*,  tblDimTime * from CTE 
Outer join tblDimTime
 on cte.[Year] = cte.[Year]
 and cte.[Month] = cte.[Month]

здесь ссылка на «Создание измерения даты или календарной таблицы в SQL Server»

https://www.mssqltips.com/sqlservertip/4054/creating-a-date-dimension-or-calendar-table-in-sql-server/

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