我有一张table如下:
EVENT_ID NUM_A NUM_A_SRC NUM_B NUM_B_SRC
1 5 Yelp 4 Google
2 3 Yelp 1 Google
我需要把它转换成以下格式:
EVENT_ID SRC RANK
1 Yelp 5
1 Google 4
2 Yelp 3
2 Google 1
我一辈子都不知道如何取消pivot并使结果集成为多个列。有人能帮忙吗?有关可复制的示例,请参见下文:
CREATE TABLE EXAMPLE(
EVENT_ID NUMBER,
NUM_A NUMBER,
NUM_A_SRC VARCHAR2(10),
NUM_B NUMBER,
NUM_B_SRC VARCHAR2(10)
);
INSERT INTO EXAMPLE (EVENT_ID, NUM_A, NUM_A_SRC, NUM_B, NUM_B_SRC)
VALUES
(1, 5, 'Yelp', 4, 'Google');
INSERT INTO EXAMPLE (EVENT_ID, NUM_A, NUM_A_SRC, NUM_B, NUM_B_SRC)
VALUES
(2, 3, 'Yelp', 1, 'Google');
SELECT * FROM EXAMPLE;
2条答案
按热度按时间wgeznvg71#
在oracle中,最简单的方法可能是
union all
:请注意
rank
是一个语言关键字(有一个窗口函数使用该名称)-我将其重命名为rnk
在查询中。db小提琴演示:
chhqkbe12#
对源表进行一次扫描: