--Table Creation
CREATE TABLE BOOK_TEST (BOOK_ID VARCHAR2(20), DEP_IND VARCHAR2(1), INSERT_DATE DATE);
--Insert data
INSERT INTO BOOK_TEST VALUES ('B100','Y','20122016');
INSERT INTO BOOK_TEST VALUES ('B101','Y','20122016');
INSERT INTO BOOK_TEST VALUES ('B101','N','20122016');
INSERT INTO BOOK_TEST VALUES ('B102','Y','20122016');
INSERT INTO BOOK_TEST VALUES ('B103','Y','20122016');
INSERT INTO BOOK_TEST VALUES ('B104','N','20122016');
INSERT INTO BOOK_TEST VALUES ('B105','N','20122016');
INSERT INTO BOOK_TEST VALUES ('B105','Y','20122016');
INSERT INTO BOOK_TEST VALUES ('B106','N','30092016');
INSERT INTO BOOK_TEST VALUES ('B107','Y','03032016');
COMMIT;
问题: 我想在所有记录中插入目标表(target_book),因为一个预订ID有一个指标(B101 - ' Y')然后它填充到目标表中并同时假设(B101-& #39; N')预订ID有一个不同的指标是' N' N'然后这个记录不应该出现在目标表(target_book)上。以上两个条件都应该在同一个日期之内,这是我面临的非常大的挑战。
示例查询: -
CREATE TABLE TARGET_BOOK AS SELECT * FROM BOOK_TEST WHERE (--conditions?)
最后,我的target_book表应填入以下结果。
B_ID DEP_IND DATE
B100 Y 20122016
B101 Y 20122016
B102 N 20122016
B103 Y 20122016
B104 Y 20122016
B105 Y 20122016
B106 N 30092016
B107 Y 03032016
答案 0 :(得分:1)
试试这个:
CREATE TABLE TARGET_BOOK AS
SELECT BOOK_ID, DEP_IND, INSERT_DATE
FROM (
SELECT BOOK_ID, DEP_IND, INSERT_DATE,
ROW_NUMBER() OVER (PARTITION BY BOOK_ID
ORDER BY CASE
WHEN DEP_IND = 'Y' THEN 0
ELSE 1
END) rn
FROM BOOK_TEST) t
WHERE t.rn = 1
使用ROW_NUMBER
,您可以枚举每个BOOK_ID
分区中的记录,并优先使用DEP_IND = 'Y'
的记录。