2016-12-13 3 views
2

行ヘッダーにテキストと値の列を転置しようとしています。私はPIVOTUNPIVOTの機能を研究しましたが、この機能は私が集めたものからの集約に依存しています。私が達成しようとしていることは以下の通りです。SQL行を列に変換する

ソーステーブルのスキーマ:

[ID] [Category] [TextName] 
     1   A   u 
     1   B   v 
     1   C   w 
     2   A   x 
     2   B   y 
     2   C   z 

結果の転置:

[ID] [A] [B] [C] 
    1  u  v  w 
    2  x  y  z 

これは可能ですか?

+0

? MySQL? SQLサーバー?オラクル?違いがあります。 – CGritton

+0

また、 'pivot'関数と' unpivot'関数が集約に依存する場合でも、集合関数として 'min()'や 'first()'を使うことができます。数値を持たなくても必ずしもそれらの関数を使うことはできません。 – CGritton

+0

SQL Serverは...それを言及しているはずです。ありがとう! – b135i11

答えて

1
SELECT id, 
     MIN(CASE WHEN Category = 'A' THEN TextName END) AS A, 
     MIN(CASE WHEN Category = 'B' THEN TextName END) AS B, 
     MIN(CASE WHEN Category = 'C' THEN TextName END) AS C 
    FROM Table 
GROUP BY id; 
+0

ありがとう!これは私の目的のために働く – b135i11

1

これは、セルごとに1つの値(行と列の組み合わせ)があっても、依然として一種の集約です。
文字列を含む基本型には最小値/最大値が定義されているので、最小値/最大値では必要な値が得られます。 RDBMSは、使用している

select * 
from t pivot (min([TextName]) for [Category] in (A,B,C)) p  

+----+---+---+---+ 
| ID | A | B | C | 
+----+---+---+---+ 
| 1 | u | v | w | 
+----+---+---+---+ 
| 2 | x | y | z | 
+----+---+---+---+ 
+0

私はあなたがこの回答を受け入れなかった理由を尋ねますか?それははるかにシンプルで、まさにあなたが探していたものです。 –

+0

これは私が探していたものの大半を占めていました。しかし、パフォーマンス面では、私はTejaの提案がより速くなることを発見しました。さらに、私はGROUP BY句も必要としました – b135i11

+0

1. GROUP BYであなたの実際のデータのパフォーマンスが向上しましたか? 2.なぜGROUP BY句が必要ですか? –