2017-06-02 4 views
0

SQLを削除するためにテーブルを折りたたみたいが、テーブルには繰り返しキーがある。この中冗長キーを1行に詰め込む

 
    key1 key2 v1  v2  v3  
    1  A  a  NULL NULL 
    1  A  NULL NULL 9  
    1  A  NULL x  NULL 
    1  A  b  NULL NULL 
    1  A  NULL NULL 8  
    1  A  NULL x  NULL 
    1  A  a  NULL NULL 
    1  A  NULL NULL 7  
    1  A  NULL y  NULL 
    1  A  b  NULL NULL 
    1  A  NULL NULL 6  
    1  A  NULL y  NULL 
    1  B  a  NULL NULL 
    1  B  NULL NULL 5  
    1  B  NULL z  NULL 
    1  B  b  NULL NULL 
    1  B  NULL NULL 4  
    1  B  NULL z  NULL 
    1  C  a  NULL NULL 
    1  C  NULL NULL 10  
    1  C    z  NULL 
    1  C  b  NULL NULL 
    1  C  NULL NULL 11  
    1  C  NULL z  NULL 

:たとえば、私はこれを折りたたむしたい

 
    key1 key2 v1 v2 v3 
    1  A  a x 9 
    1  A  b x 8 
    1  A  a y 7 
    1  A  b y 6 
    1  B  a z 5 
    1  B  b z 4 
    1  C  a z 10 
    1  C  b z 11 

集計機能が動作しませんが、私は自己の参加で成功を持っていませんでした。何か案が?

+1

どの値がどの値になるのか、どのように知っていますか? SQLテーブルは、*順序付けられていない*集合を表します。また、どのデータベースを使用していますか? –

+0

この表に自動インクリメント列はありますか? – maSTAShuFu

+0

私はハイブを使用しています。私は、同じ理由で集計関数を使用しないでcaseステートメントでハイブピボットを使用してnullを持つ初期テーブルを取得しました。 – kiki

答えて

0

を "明確な選択" しようとしています。これは通常回避するものですが、避けることはできません。あなたの元のテーブルは次のようなものになります。私はあなたのクエリの結果は、別の順序で行を示していますが、それは問題ではありません、テーブルのため

 
key1 key2 col value 
1  A  v1 a 
1  A  v1 a 
1  A  v1 a 
1  A  v1 a 
1  A  v1 b 
1  A  v1 b 
1  A  v1 b 
1  A  v1 b 
1  A  v2 x 
1  A  v2 x 
1  A  v2 y 
1  A  v2 y 
... 

をは固有の順序を持​​っていません。データには順序付けられていないセットが含まれています。同じキー1 | A | v1の場合、テーブルには異なる値(4回の 'a'、4回の 'b')が含まれていることがわかります。これは予期せぬことです。通常、キー値表にはがあり、キーあたりの値はです。

データモデルに問題がある可能性があります。または、テーブルに列数が増えています。履歴データを表示する日付、1 | A | v1の現在の値を選択することもできます。それで、これを考慮に入れて元のクエリを変更する必要があります。またはデータモデルであり、1 | A | v1に4つの 'a'と4つの 'b'が含まれていますが、期待されるクエリの結果は意味をなさない。v1 = 'a'からv2 =例えば「x」。

だから何かです:datamodel、既存のクエリ、希望の結果です。どちらを見つけるか。

0

あなたはあなたがキー/値テーブルを持っている

Select distinct key1, key2, v1, v2, v3 
From SomeTable 
+0

最初のテーブルに変更が加えられていないようです。 – kiki

+0

それから、上のGordon Linoffの質問に答えてください。どの非NULL値が互いに整列しているかは、どのようにして知ることができますか?あなたが十分な情報を明らかにしていない、または恣意的と思われる。 –