2016-12-20 13 views
1

私はのVerticaのDBには、次の表を持っている: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  | 
+-----+-------+-------+-------+-------+ 

使用法:私はF_k-1が私の理解では上記の要求のように並べ替え必要がある、結合を使用したい新しい候補を生成するために、アプリオリアルゴリズムを生成するために、SQLを使用していますが。

ありがとうございました。 (私はこれが最も効率的な方法にVertica用/クリーンコードであること、権限受領することはできませんが)

+0

ソースデータの列数と行数 –

+0

カラム<6; 行> 1000 – valenzio

答えて

3

私はに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

はい、それは正しいですが、PythonでSQLクエリーを生成する可能性がありますが、非常に長いとクーリエがいかに効率的になるかという大きな疑問があります。 – valenzio

+0

@CraigYoung - あなたはどちらも間違っています。ハードコーディングされたものは、行数ではなく列数です。 –

関連する問題