2016-12-20 8 views
1

У меня есть следующая таблица в Vertica дб:Sql: Сортировка записей строк в алфавитном

+-----+-------+-------+-------+-------+ 
| Tid | Item1 | Item2 | Item3 | Item4 | 
+-----+-------+-------+-------+-------+ 
| 1 | A  | B  | C  | D  | 
| 2 | A  | E  | B  | D  | 
| 3 | D  | A  | 5  | C  | 
| 4 | B  | 1  | E  | A  | 
+-----+-------+-------+-------+-------+ 

Моя цель состоит в том, что для сортировки строк в алфавитном порядке, все записи являются строками. Результат будет выглядеть так:

+-----+-------+-------+-------+-------+ 
| Tid | Item1 | Item2 | Item3 | Item4 | 
+-----+-------+-------+-------+-------+ 
| 1 | A  | B  | C  | D  | 
| 2 | A  | B  | D  | E  | 
| 3 | 5  | A  | C  | D  | 
| 4 | 1  | A  | B  | E  | 
+-----+-------+-------+-------+-------+ 

Использования: Я использую SQL для создания априорного алгоритма для того, чтобы генерировать новые кандидат Я хотел бы использовать F_k-1 присоединиться, что в моем понимании потребностей сортировки, как предложено выше ,

Спасибо за помощь.

+0

Сколько столбцов и сколько строк в ваших исходных данных? –

+0

Столбцы <6; Строки> 1000 – valenzio

ответ

3

Я не имею доступа к Vertica, но это должно сделать работу (хотя я не могу грантополучатель, что это наиболее эффективный способ/чистый код Vertica)

select  Tid 
      ,min (case rn when 1 then item end) as Item1 
      ,min (case rn when 2 then item end) as Item2 
      ,min (case rn when 3 then item end) as Item3 
      ,min (case rn when 4 then item end) as Item4 

from  (select  Tid,item 
         ,row_number() over (partition by Tid order by item) as rn 

      from  (   select Tid ,Item1 as item from t 
         union all select Tid ,Item2   from t 
         union all select Tid ,Item3   from t 
         union all select Tid ,Item4   from t 
         ) t 
      ) t 

group by Tid 

+-----+-------+-------+-------+-------+ 
| tid | item1 | item2 | item3 | item4 | 
+-----+-------+-------+-------+-------+ 
| 1 | A  | B  | C  | D  | 
+-----+-------+-------+-------+-------+ 
| 2 | A  | B  | D  | E  | 
+-----+-------+-------+-------+-------+ 
| 3 | 5  | A  | C  | D  | 
+-----+-------+-------+-------+-------+ 
| 4 | 1  | A  | B  | E  | 
+-----+-------+-------+-------+-------+ 
+0

В примере всего 4 строки. Но в ожидаемом случае использования, вероятно, много других, что сделало бы ваше решение довольно непрактичным. –

+0

Да, это правильно, однако можно сгенерировать sql querry с помощью python, но большой вопрос в том, насколько эффективен этот querry, если он очень длинный. – valenzio

+0

@CraigYoung - Вы оба ошибаетесь. Жестко закодированная вещь - это количество столбцов, а не количество строк. –

 Смежные вопросы

  • Нет связанных вопросов^_^