Отображать значения из разных месяцев рядом? - PullRequest
0 голосов
/ 26 сентября 2019

У меня есть требование отображать данные по месяцам рядом.

Ниже приведены записи в таблице:

|Student ID| Type   | Date      | Amount($)
|00000001  | Foods  |01/01/2009 | 10
|00000001  | Foods  |01/02/2009 | 20
|00000002  | Drinks |01/01/2009 | 10
|00000003  | Snacks |01/02/2009 | 10
|00000003  | Drinks |01/02/2009 | 10

Ожидаемые результаты аналогичны приведенным ниже:

|Student ID| Type   | Jan | Feb
|00000001  | Foods  | 10  | 20
|00000002  | Drinks | 10  | 0
|00000003  | Snacks | 0   | 10
|00000003  | Drinks | 0   | 10

Количество типов Foods for Student ID отображается в зависимости от месяца.

Я пытался достичь ожидаемых результатов, используя оператор CASE, как показано ниже, но он не может достичь того, что ожидается.

SELECT STUDENT_ID
  , TYPE
  , CASE WHEN MONTH(DATE)=1 THEN AMOUNT ELSE 0 AS JAN
  , CASE WHEN MONTH(DATE)=2 THEN AMOUNT ELSE 0 AS FEB
FROM CANTEEN_SPENT

Но результаты выглядят как ниже

|Student ID| Type   | Jan | Feb
|00000001  | Foods  | 10  | 0
|00000001  | Foods  | 0   | 20
|00000002  | Drinks | 10  | 0
|00000003  | Snacks | 0   | 10
|00000003  | Drinks | 0   | 10

Данные для идентификатора студента 00000001 следует объединить, как показано в ожидаемом примере.

1 Ответ

1 голос
/ 26 сентября 2019

Попробуйте условное агрегирование:

SELECT STUDENT_ID
  , TYPE
  , SUM(CASE WHEN MONTH(DATE) = 1 THEN AMOUNT END) AS JAN
  , SUM(CASE WHEN MONTH(DATE) = 2 THEN AMOUNT END) AS FEB
FROM CANTEEN_SPENT
GROUP BY STUDENT_ID, TYPE
ORDER BY STUDENT_ID
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...