0

私はSQLを初めて使用し、次のようにテーブルをピボットする方法を考えています。

Col1 Col2 Col3
1     a    w
2     a    x 
1     b    y
2     b    z 

の中へ

Col1 a b
1    w y
2    x z

遊んでGROUP BYいましたが、一意の行を列に変換できないようです

4

3 に答える 3

5

CASEこれは、次の式を使用した集計関数を使用して実行できます。

select col1,
  max(case when col2 = 'a' then col3 end) a,
  max(case when col2 = 'b' then col3 end) b
from yourtable
group by col1

SQL FiddlewithDemoを参照してください

PIVOT関数(SQL Server 2005+ / Oracle 11g +)でRDBMSを使用している場合、クエリは次のようになります(注:以下のOracle構文):

select *
from
(
  select col1, col2, col3
  from yourtable
)
pivot
(
  max(col3)
  for col2 in ('a', 'b')
) 

SQL FiddlewithDemoを参照してください

これを行う最後の方法は、同じテーブルで複数の結合を使用することです。

select t1.col1, 
  t1.col3 a, 
  t2.col3 b
from yourtable t1
left join yourtable t2
  on t1.col1 = t2.col1
  and t2.col2 = 'b'
where t1.col2 = 'a'

SQL FiddlewithDemoを参照してください

すべてが結果をもたらします:

| COL1 | 'A' | 'B' |
--------------------
|    1 |   w |   y |
|    2 |   x |   z |
于 2013-01-28T20:50:59.753 に答える
1

クエリ定義を強制的に変更せずにCol2の個別の値を変更できるようにする必要がある場合は、SQLAnalysisServicesのようなOLAP構造を探している可能性があります

于 2013-01-28T20:53:45.167 に答える
0

あなたは次のようなことを試してみるべきです

select * from
(select Col1, Col2, Col3 from TableName) 
pivot xml (max(Col3)
for Col2 in (any) )

私は携帯電話を使用しているので、現在機能しているかどうかをテストできません。

于 2013-01-28T21:09:46.587 に答える