문제

이름, 주소 및 기타 데이터가있는 모든 객실을 얻는 쿼리를 만들었습니다.

(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에서 가능합니까?

주소 필드에 대한 별개의 추가를 시도했지만 물론 불가능했습니다.

고맙습니다.

도움이 되었습니까?

해결책

당신은 그것을 사용하여 달성 할 수 있습니다 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
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top