0
SELECT
ステートメントをフォーマットして、結果セットをいくつかの列に渡って出力するようにしています。SELECT、異なる列の行をIDを共有する単一の行にフォーマット
私はこのような結果セットを持っている:
ID VID PID VALUE
1 x 1 a
2 y 1 A
3 y 2 B
4 x 2 b
5 y 3 C
6 x 3 c
7 x 4 d
8 y 4 D
9 x 5 e
10 y 5 E
私は効果的に単一の行に重複PID
秒で値を結合する1つのSELECT
文をフォーマットすることはできますか?私は実際にはPID
とVALUE
に興味があります。
PID VALUE1 VALUE2
1 a A
2 b B
3 c C
4 d D
5 e E
そうでなければ、私は同じテーブルに作用するクエリで実際のJOIN
Sを使用すべきですか?
私はCASE
を使用しようとしたが、このような結果セットまで得ることができます:私はややこのようになりますを使用してい
ID VID PID VALUE1 VALUE2
1 x 1 a NULL
2 y 1 NULL A
3 y 2 NULL B
4 x 2 b NULL
5 y 3 NULL C
6 x 3 c NULL
7 x 4 d NULL
8 y 4 NULL D
9 x 5 e NULL
10 y 5 NULL E
クエリ。
SELECT
ID,
VID,
PID,
CASE WHEN VID = 'x' THEN VALUE END VALUE1,
CASE WHEN VID = 'y' THEN VALUE END VALUE2
FROM BIGTABLE
WHERE PID IN (1, 2, 3, 4, 5)
AND VID IN ('x', 'y')
私はそのように全体のテーブルからそれらを選択していますので、ちょうど1-5とX & yのではないPID
とVID
の値がたくさんあります。
したがって、これらのケースでは、GROUP BY句の解析/集約関数を使用する必要がありますか? 'CASE'だけを試してみたら、私は' ORA-00979:GROUP BY式ではない 'を得るでしょう。 – Eriol
@Eriol - 'PID'ごとに1つの行だけが必要なので、集計したい(' GROUP BY')。集約する場合は、グループ化されていない列に対して集計関数(MINやMAXやSUMなど)を使用する必要があります。条件付き集計では、ここに示すように、いくつかの値はNULLであり、MIN、MAX、SUMなどの集計関数によって無視されます。それがあなたのソリューションと私の違いです。 Oracle 11.1以降では、集約である 'PIVOT'演算子を使用できます(ただし、構文では' GROUP BY'節は使用されません)。 – mathguy