#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';
возвращает версию TD5. Версия TD 16.10.06.01