Как объединить одну и ту же таблицу, но по разным критериям, чтобы иметь несколько результатов в виде столбца - PullRequest
0 голосов
/ 19 июня 2019

Итак, у меня есть такая таблица (упрощенно):

id|   Country_dsc | Year | Month |   Quantity  | Value |
1 |   Armenia     | 2019 |   2   |      4      |   2   |
2 |   Armenia     | 2019 |   3   |      6      |   4   |
3 |   Armenia     | 2018 |   1   |      6      |   5   |
4 |   Armenia     | 2018 |   2   |      3      |   3   |
5 |   Armenia     | 2018 |   3   |      7      |   5   |

И я бы хотел получить такой результат:

  Name        | YTD_Quantity_Y | YTD_Quantity_LY | YTD_Value_Y | YTD_Value_LY | 
  Armenia     |       10       |        16       |      6      |     13       |

с суммой YTD_Quantity_Yвсего количества 2019 и YTD_Quantity_LY сумма всего количества 2018 с начала года до текущего месяца (в этом примере март).Та же логика для значения.

Итак, что я пробовал:

SELECT t1.Country_Dsc as Name,
        SUM(t1.Quantity) as YTD_Quantity_Y, -- January, February, March 2019
        SUM(t2.Quantity) as YTD_Quantity_LY -- January, February, March 2018
        SUM(t2.Value) as YTD_Value_Y  -- January, February, March 2019
        SUM(t2.Value) as YTD_Value_LY -- January, February, March 2018
FROM example_table t1
     LEFT JOIN example_table t2 on t1.Country_Dsc = t2.Country_Dsc
                                AND t1.Year = 2018 
                                AND t1.Month = t2.Month
WHERE t1.Year = 2019
      and t1.Month <= 3 -- in this case I want all data from January to March for 2019 and 2018 
GROUP BY t1.Country_Dsc

Проблема в том, что с 2019 года нет записей за январь, я не получаю количество января 2018 года в YTD_Quantity_LY .

Если я начинаю с 2018 года и присоединяюсь к 2019 году, это работает, но иногда у меня есть случай, когда для 2018 года у меня нет записи в течение месяца, поэтому она не будет отображаться для 2019 года (YTD_Quantity_Y ).

Возможно ли получить желаемый результат без использования запроса для каждого года?

1 Ответ

1 голос
/ 19 июня 2019

Попробуйте запрос ниже:

declare @tbl table (id int, Country_dsc varchar(10), [Year] int, [Month] int, Quantity int, [Value] int );
insert into @tbl values
(1 , 'Armenia' , 2019 , 2 , 4 , 2 ),
(2 , 'Armenia' , 2019 , 3 , 6 , 4 ),
(3 , 'Armenia' , 2018 , 1 , 6 , 5 ),
(4 , 'Armenia' , 2018 , 2 , 3 , 3 ),
(5 , 'Armenia' , 2018 , 3 , 7 , 5 )

select Country_dsc [Name],
       sum(case when year = 2019 then quantity else 0 end) YTD_Quantity_Y ,
       sum(case when year = 2018 then quantity else 0 end) YTD_Quantity_LY ,
       sum(case when year = 2019 then Value else 0 end) YTD_Value_Y ,
       sum(case when year = 2018 then Value else 0 end) YTD_Value_LY 
from @tbl
group by Country_dsc
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...