我做了一个查询,让所有房间都有它的名字,地址和其他数据。
(select replace(wm_concat( '\par \tab ' || s.address|| '\par \tab ' || s.lib || '\par \tab '), ',', '\par - ')
from t_room s)
对于所有数据来说,只有一个重要数据是名称和地址。
事实是,2个房间可以有相同的地址,所以结果我不想要:
room1 address1 - room2 address1
,我实际上得到了,但是
room1 address1 - room2 at the same address
这可能在oracle 10中吗?
我尝试为地址字段添加一个distinct,但当然不可能。
谢谢。
答案 0 :(得分:2)
您可以使用LAG
函数实现该功能:
CREATE TABLE t_room_s (
room VARCHAR2(20),
address VARCHAR2(20)
);
INSERT INTO t_room_s VALUES ('room1', 'addr 1');
INSERT INTO t_room_s VALUES ('room2', 'addr 1');
INSERT INTO t_room_s VALUES ('room3', 'addr 2');
INSERT INTO t_room_s VALUES ('room4', 'addr 3');
INSERT INTO t_room_s VALUES ('room5', 'addr 4');
INSERT INTO t_room_s VALUES ('room6', 'addr 4');
INSERT INTO t_room_s VALUES ('room7', 'addr 4');
INSERT INTO t_room_s VALUES ('room8', 'addr 5');
SELECT wm_concat(room || ' ' || addr) AS val
FROM (
SELECT
room,
CASE
WHEN LAG(address, 1, NULL) OVER (ORDER BY address) = address THEN 'same address'
ELSE address
END AS addr
FROM
t_room_s
ORDER BY address
)
;
输出:
VAL ------------------------------------------------------------------------------------------------------------------------- room1 addr 1,room2 same address,room3 addr 2,room4 addr 3,room5 addr 4,room6 same address,room7 same address,room8 addr 5