2012-02-06 6 views
-1

に行をオフにする - 例えば:SQL:Iカラムに行の値を回転する必要が列

SELECT s.section_name, 
     s.section_value 
    FROM tbl_sections s 

この出力:

section_name section_value 
----------------------------- 
sectionI  One 
sectionII  Two 
sectionIII  Three 

所望の出力:

sectionI  sectionII  sectionIII 
----------------------------------------- 
One   Two   Three 
+0

Oracleのバージョンは? –

+1

section_nameがsectionIで、値が異なる複数の行がある場合はどうなりますか?別の行を表示していますか?もしそうなら、セクションIIとセクションIIIの下に何を表示すべきですか?各セクション名に一致しない数のエントリがある場合、空の列はどこに行きますか?一般的な意味で、あなたがしようとしていることはそれほど明確に定義されていません。 – gfortune

答えて

6

これはおそらく、あなたが選んだプログラミング言語のクライアント側でうまくいっているでしょう。

セクション名を事前に知っていなければ、列名に変換する必要はありません。

new PIVOT operatorを使用)は、Oracle 11gの更新答え:

WITH 
    SELECT section_name, section_value FROM tbl_sections 
AS 
    data 
SELECT 
    one.section_value 'sectionI', 
    two.section_value 'sectionII', 
    three.section_value 'sectionIII' 
FROM 
    select selection_value from data where section_name = 'sectionI' one 
    CROSS JOIN 
    select selection_value from data where section_name = 'sectionII' two 
    CROSS JOIN 
    select selection_value from data where section_name = 'sectionIII' three 

かも使用します。古いバージョンの

SELECT * FROM 
    (SELECT section_name, section_value FROM tbl_sections) 
PIVOT 
    MAX(section_value) 
    FOR (section_name) IN ('sectionI', 'sectionII', 'sectionIII') 

、あなたには、いくつかの自己結合を行うことができますMAXトリックと「集約」:

SELECT 
    MAX(DECODE(section_name, 'sectionI', section_value, '')) 'sectionI', 
    MAX(DECODE(section_name, 'sectionII', section_value, '')) 'sectionII', 
    MAX(DECODE(section_name, 'sectionIII', section_value, '')) 'sectionIII' 
FROM tbl_sections 
+0

こんにちは、あなたの答えをありがとう、私たちがセクションの名前を知らないどのような方法はありますか? – Ianthe

+0

これはかなり恐ろしいクロス製品を生み出すだろうか? @sprenna No. – gfortune

+1

いいえSQLだけではありません。クエリを実行する前に、テーブル名、カラム名などを知っておく必要があります。おそらく、PL/SQLによるネイティブ動的SQLを使用しています。しかし、それはそれを "クライアント側であなたが選んだプログラミング言語で"行うのと同じです。 – Thilo

関連する問題