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
我可以格式化一個SELECT
語句來有效地參加與重複PID
S中的值轉換爲單列?我只對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')
有很多的PID
和VID
值不在只是1-5和X &ÿ所以我選擇它們從整個表的方式。
因此,我必須使用GROUP BY子句的分析/聚合函數來處理這些情況?如果我只嘗試'CASE',我會得到'ORA-00979:不是GROUP BY表達式'。 – Eriol
@Eriol - 每個PID只需要一行,所以你想要聚合('GROUP BY')。如果你進行了聚合,你必須在未被「分組」的列上使用聚合函數(比如'MIN'或'MAX'或'SUM')。在條件聚合中,如這裏所示,一些值將是'NULL',並且它們將被諸如MIN,MAX,SUM等聚合函數忽略。這是您的解決方案和我的解決方案之間的差異從Oracle 11.1開始,您可以使用'PIVOT'運算符,它也是一個聚合(但語法不使用'GROUP BY'子句)。 – mathguy