На самом деле эти поля не '1', это большие длинные строки.Моя цель здесь состоит в том, чтобы программа на С ++ анализировала эти данные в иерархические объекты.поэтому я хочу, чтобы запрос выполнялся максимально быстро, при этом возвращая минимальное количество данных, которое я мог бы использовать для заполнения объектов.
Вот как, в моем воображении, может быть достигнута эта цель, но если есть более простой способ достичь истинной цели, я весь слух.
Другие вещи, о которых я думал: я рассматривал сводную таблицу, но если бы у каждого уровня иерархии было 5 ветвей, к тому времени, когда мы получим данные, в нашей сводной таблице было бы более 3000 столбцов.
Я хочу объединить 2 поля вместе, затем добавить их в список, все при группировании по многоуровневым полям заголовка и только для печати полей, если они не совпадают с ранее напечатанной строкой.
input
tier1,tier2,tier3,tier4,tier5,data1,data2
1 1 1 1 1 big tall
1 1 1 1 1 big smelly
1 1 1 1 2 gross tall
1 1 1 2 1 flatulent exceptional
desired output:
1 1 1 1 1 big,tall big,smelly
2 gross,tall
2 1 flatulent,exceptional
мнимая функция, которая печатает поле, только если оно изменилось с момента последней напечатанной строки, мы назовем его сумасшедшим ()
select
crazy(tier1),
crazy(tier2),
crazy(tier3),
crazy(tier4),
crazy(tier5),
listagg(data1||data2, ' ') within group(?)
from table
group by tier1,tier2,tier3,tier4,tier5