Sql 在甲骨文中的wm_concat中是不同的
我做了一个查询,得到所有房间的名称、地址和其他数据Sql 在甲骨文中的wm_concat中是不同的,sql,oracle,oracle10g,concat-ws,Sql,Oracle,Oracle10g,Concat Ws,我做了一个查询,得到所有房间的名称、地址和其他数据 (select replace(wm_concat( '\par \tab ' || s.address|| '\par \tab ' || s.lib || '\par \tab '), ',', '\par - ') from t_room s) 对于所有数据来说太长了,唯一重要的数据是名称和地址 事实上,两个房间可以有相同的地址,所以结果我不想要: room1地址1-room2地址1 我真的明白了,但是 room1地址1-同一地址的r
(select replace(wm_concat( '\par \tab ' || s.address|| '\par \tab ' || s.lib || '\par \tab '), ',', '\par - ')
from t_room s)
对于所有数据来说太长了,唯一重要的数据是名称和地址
事实上,两个房间可以有相同的地址,所以结果我不想要:
room1地址1-room2地址1
我真的明白了,但是
room1地址1-同一地址的room2
这在oracle 10中可能吗
我尝试为address字段添加一个distinct,但当然不可能
谢谢。您可以使用
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
瓦尔
-------------------------------------------------------------------------------------------------------------------------
room1地址1,room2地址相同,room3地址2,room4地址3,room5地址4,room6地址相同,room7地址相同,room8地址5所以,每当一个房间与它前面的房间有相同的地址时,你想在相同的地址获得
,而不是实际的地址?@PrzemyslawKruglej是的,因为这里,我只有地址
作为值,但这可能是一个很长的地址,所以我没有将这个长地址写两次,而是在同一个地址
上得到了。谢谢。我不知道的oracle关键字太多了。