Предположим, у меня есть таблица со следующими данными:Как я могу условно группировать два разных столбца в Oracle?
+----------+-----+--------+
| CLASS_ID | Day | Period |
+----------+-----+--------+
| 1 | A | CCR |
+----------+-----+--------+
| 1 | B | CCR |
+----------+-----+--------+
| 2 | A | 1 |
+----------+-----+--------+
| 2 | A | 2 |
+----------+-----+--------+
| 3 | A | 3 |
+----------+-----+--------+
| 3 | B | 4 |
+----------+-----+--------+
| 4 | A | 5 |
+----------+-----+--------+
Как вы могли догадаться из природы данных, я работаю на запрос Oracle SQL, который извлекает данные расписания класса из информационной системы студенческого , Я пытаюсь вывести выражение «период выражения» класса, вычисленное значение, которое содержит поля Day
и Period
в одном поле. Давайте мои ожидания от пути первого:
- Если периоды совпадают, период должен быть
GROUP BY
полем, иDay
должны быть агрегированным полем (черезLISTAGG
функции), поэтому расчетное поле будетCCR (A-B)
- Если матч дней, день должен быть
GROUP BY
поля, иPeriod
должны быть агрегированным полем, поэтому расчетное поле будет1-2 (A)
Я знаю только о том, как сделать каждый GROUP BY
в индивидуальном порядке, что-то вроде для того, где Day
сек матч:
SELECT
day,
LISTAGG(period, '-') WITHIN GROUP (ORDER BY period)
FROM schedule
GROUP BY day
и наоборот для согласования Periods
, но я не вижу, как я мог бы сделать это динамически для Period
иDay
в том же запросе.
Вы также заметите, что последняя строка в наборе данных примера не охватывает несколько дней или периодов, поэтому мне также необходимо учитывать классы, которые вообще не нуждаются в GROUP BY
.
Редактировать
Конечный результат должен быть:
+------------+
| Expression |
+------------+
| CCR(A-B) |
+------------+
| 1-2(A) |
+------------+
| 3-4(A-B) |
+------------+
| 5(A) |
+------------+
Итак, что выход выглядеть, от входов предоставленных вами и с логикой вы объяснить? Кроме того, когда вы говорите о «делать это динамично», что вы подразумеваете под «динамически»? – mathguy
«Динамически» Я просто имею в виду тот факт, что я не думаю, что могу жестко закодировать, какое поле следует сгруппировать. –
Почему не показаны 1-2 и 3 вместе (A)? – mathguy