Как классифицировать набор данных без использования `case when` - PullRequest
0 голосов
/ 18 февраля 2020

Пожалуйста, посмотрите на мою фотографию, на которой я попытался объяснить, чего я хочу достичь: каждый столбец должен представлять собой сумму значений в стране и категории. Как вы предложите мне решить эту проблему? Должен быть стандартный подход SQL пользователя, которого я пропустил.

Я знаю, что могу обойти это как-то вроде

case when category = 'CatA' then sum(value) as 'CatA', а затем group by

но когда мои категории слишком много, это решение будет грязным, я буду избегать его.

Я использую Oracle SQL и жабу

РЕДАКТИРОВАТЬ: У меня есть два ответа, но я думаю, что неправильно сообщил, что я sh. По сути, я sh должен достичь избегать ввода категорий вручную .

enter image description here

Ответы [ 2 ]

0 голосов
/ 18 февраля 2020

Вы можете использовать PIVOT следующим образом:

Select *
FROM (select country, category, value from your_table)
PIVOT
(sum(value) for 
  category in ('CatA', 'CatB', 'CatC', ....your other categories like this...)
);

Ура !!

0 голосов
/ 18 февраля 2020

Вы хотите условную агрегацию. case является аргументом для sum():

sum(case when category = 'CatA' then value end) as CatA

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

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