Как мне сказать «Печатать только если значение изменилось с предыдущей напечатанной строки» - PullRequest
0 голосов
/ 07 марта 2012

На самом деле эти поля не '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

1 Ответ

0 голосов
/ 07 марта 2012

Если вы будете знать столбцы, вы можете использовать CTE (в зависимости от того, какую версию SQL вы используете).Если это не сработает, то я бы предложил просто выполнить свою работу в коде.SQL предназначен для логики на основе SET, а не для процедур и функций (даже если они поддерживаются).Производительность выполнения 5 или 6 функций в каждой строке будет ужасной по сравнению с выполнением анализа в коде

...