使用具有相同日期的不同条件插入 - Oracle 10g

时间:2016-03-03 14:21:33

标签: sql oracle

--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

1 个答案:

答案 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'的记录。