Teradata SQL Assistant — Как я могу сводить или транспонировать большие таблицы с большим количеством столбцов и строк?

#sql #teradata #transpose

#sql #teradata #транспонировать

Вопрос:

Я использую Teradata SQL Assistant версии TD 16.10.06.01…

Я видел, как многие люди транспонируют данные для множества небольших таблиц, но я работаю с тысячами клиентов, и мне нужно разбить столбцы на значения позиций, чтобы сравнить заказы / выделить различия между заказами. Проблема в том, что все они связаны горизонтально, и мне нужно перенести их в Id, идентификатор транзакции, версию и значение позиции 1, значение позиции 2 … затем в другой столбец, сравнивающий значения, чтобы увидеть, изменились ли они.

пример:

  ---- ------------ ----------- ------------ ---------------- -------- ---------- ---------- ------ ------------- 
| Id | First Name | Last Name |    DOB     | transaction id |  Make  | Location | Postcode | Year |    Price    |
 ---- ------------ ----------- ------------ ---------------- -------- ---------- ---------- ------ ------------- 
|  1 | John       | Smith     | 15/11/2001 |        1654654 | Audi   | NSW      |     2222 | 2019 | $ 10,000.00 |
|  2 | Mark       | White     | 11/02/2002 |        1661200 | BMW    | WA       |     8888 | 2016 | $ 8,999.00  |
|  3 | Bob        | Grey      | 10/05/2002 |        1667746 | Ford   | QLD      |     9999 | 2013 | $ 3,000.00  |
|  4 | Phil       | Faux      | 6/08/2002  |        1674292 | Holden | SA       |     1111 | 2000 | $ 5,800.00  |
 ---- ------------ ----------- ------------ ---------------- -------- ---------- ---------- ------ ------------- 
  

надеясь изменить данные на :

  ---- ---------- ---------- ---------- ---------------- ---------- ---------- ---------------- --------- ----- 
| id | trans_id | Vers_ord | Item Val | Ln_Itm_Dscrptn | Org_Val  | Updt_Val | Amndd_Ord_chck | Lbl_Rnk | ... |
 ---- ---------- ---------- ---------- ---------------- ---------- ---------- ---------------- --------- ----- 
|  1 |  1654654 |        2 |    11169 | Make           | Audi BLK | Audi WHT | Yes            |       1 |     |
|  1 |  1654654 |        2 |    11189 | Location       | NSW      | WA       | Yes            |       2 |     |
|  1 |  1654654 |        2 |    23689 | Postcode       | 2222     | 6000     | Yes            |       3 |     |
 ---- ---------- ---------- ---------- ---------------- ---------- ---------- ---------------- --------- ----- 
  

Недавно с меньшими данными я создал таблицу, добавленную в значения, затем использовал оператор case, когда значение 1 затем xyz с объединением продуктов… и администраторы хранилища данных не упомянули ничего не по порядку. но у меня была только таблица столбцов 16 на 200 для транспонирования (сумма, среднее значение, количество, медиана (функция) x 4 подмножества клиентов), которые были значительно меньше, чем мои текущие таблицы для сравнения.

Я беспокоюсь, что мой предыдущий метод, вероятно, замедлит работу хранилища данных, плюс мне потребуется значительное количество времени для ввода SQL.

Есть ли лучший способ транспонировать большие таблицы?

Комментарии:

1. SQL Assistant — это клиент (и 14 очень устаревших), с какой версией базы данных вы работаете? В последних версиях есть как PIVOT, так и UNPIVOT.

2. Я не понимаю, какое отношение ваши результаты имеют к образцу данных. Для транзакции не отображаются изменения. В исходных данных есть четыре транзакции, а в результатах — только одна транзакция.

3. Результаты представляют собой предполагаемый выходной фрагмент, до которого я пытаюсь добраться …. существует около 360 000 клиентов и несколько версий заказов для сравнения……. Я не могу вспомнить версию Teradata, только то, что я использовал функцию Median, которая, по-видимому, была новой для нашей компании…..

4. select InfoData from dbc.dbcinfoV where InfoKey = 'RELEASE'; возвращает версию TD

5. Версия TD 16.10.06.01