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关键字太多了。