У меня есть большой запрос SQL, который соединяет столбцы из нескольких таблиц, чтобы дать данные в этом формате:Преобразование нескольких строк в 1 колонку без поворота в оракуле
ID CODE Count Action
-----------------------------
1 A 02 VIEWED
1 A 22 CLICKED
1 A 45 PRINTED
1 A 32 SCHEDULED
2 A 34 VIEWED
2 B 14 CLICKED
2 B 23 PRINTED
2 B 78 SCHEDULED
.
.
X D 12 CLICKED
Значение действия может быть только просмотрено, щелкнули, ЗАПЛАНИРОВАН, ПЕЧАТИ. Каждая комбинация ID, CODE имеет максимум 4 строки. Если нет количества действий говорят, что «Clicked», строка для этого нет
Поэтому, как только у меня есть набор результатов, я хочу, чтобы сгладить это, чтобы иметь данные в этом формате:
Id CODE VIEWED CLICKED PRINTED SCHEDULED
-----------------------------------------------
1 A 02 11 45 32
1 B 54 57 89 45
2 B 34 14 23 78
3 G null null 28 20
X D null 12 null null
мой запрос делает много вещей, но в общем он делает:
SELECT ID,CODE, ACTION, COUNT(*) AS COUNT
FROM MY_TABLE
GROUP BY ID,CODE,ACTION.
в одном запросе я хочу, чтобы получить набор результатов, а затем расплющить строки. Я не могу использовать union-alls и т. Д., Чтобы запросить БД несколько раз.
База данных Oracle 9i, поэтому функция поворота не будет работать.
Вам нужно подвести поле 'count' вместо добавления 1. Как,' случай, когда ACTION = «ПРОСМОТРЕТЬ» ТОГДА счет ELSE 0 END' – Dba
@Dba - не был полностью уверен в этом вопросе. OP упоминает 'COUNT (*)' создает поле 'Count'. Использование 'SUM' с' CASE', как это, должно дать тот же результат, но только суммирование, где сопоставление в поле «Действие». С уважением. – sgeddes
Да, вы правы, это было очень ясно из вопроса. Спасибо за разъяснения. – Dba