我需要在查询中添加一些条件逻辑,如果一行具有相同的值BUSINESS_UNIT,VOUCHER_ID然后只输出WTHD_RULE等于'PA1'的行,我不能应用条件(WTHD_RULE = 'PA1')普遍(到整个查询),因为我仍然想要获取不包含WTHD_RULE = 'PA1'. I just want to filter the results using this criteria when there are rows with the sameBUSINESS_UNIT andVOUCHER_ID 的行。
基本上发生的事情是,有两次付款被应用到同一个凭证/业务单位,但如果它不包含“PA1”,我不想要额外的行(有重复的地方)WTHD_RULE
结果将包括来自第一个查询以及第二个查询中的第二行的数据。有没有办法在不使用 CTE 的情况下做到这一点?
编辑:
或者,有没有一种方法可以自我加入并为WTHD_AMTWTHD_RULE 等于 'PA1' 的位置创建一个新列?
编辑2:
CREATE TABLE mytable(
BUSINESS_UNIT INTEGER NOT NULL
,VOUCHER_ID INTEGER NOT NULL
,PYMNT_CNT INTEGER NOT NULL
,PYMNT_ID INTEGER
,PYMNT_TYPE VARCHAR(1) NOT NULL
,PAID_AMT NUMERIC(7,3) NOT NULL
,PYMNT_GROSS_AMT NUMERIC(8,3) NOT NULL
,DUE_DT DATE NOT NULL
,PRIMARY KEY(BUSINESS_UNIT,VOUCHER_ID)
);
INSERT INTO mytable(BUSINESS_UNIT,VOUCHER_ID,PYMNT_CNT,PYMNT_ID,PYMNT_TYPE,PAID_AMT,PYMNT_GROSS_AMT,DUE_DT) VALUES (50000,00026130,2,NULL,'W',0.000,30.700,'2018-06-29 00:00:00.000');
INSERT INTO mytable(BUSINESS_UNIT,VOUCHER_ID,PYMNT_CNT,PYMNT_ID,PYMNT_TYPE,PAID_AMT,PYMNT_GROSS_AMT,DUE_DT) VALUES (50000,00026130,1,0000121315,'R',969.300,969.300,'2018-06-29 00:00:00.000');
INSERT INTO mytable(BUSINESS_UNIT,VOUCHER_ID,PYMNT_CNT,PYMNT_ID,PYMNT_TYPE,PAID_AMT,PYMNT_GROSS_AMT,DUE_DT) VALUES (50000,00026131,1,NULL,'R',0.000,0.000,'2018-06-30 00:00:00.000');
INSERT INTO mytable(BUSINESS_UNIT,VOUCHER_ID,PYMNT_CNT,PYMNT_ID,PYMNT_TYPE,PAID_AMT,PYMNT_GROSS_AMT,DUE_DT) VALUES (50000,00026132,1,NULL,'R',0.000,1000.000,'2010-06-30 00:00:00.000');
INSERT INTO mytable(BUSINESS_UNIT,VOUCHER_ID,PYMNT_CNT,PYMNT_ID,PYMNT_TYPE,PAID_AMT,PYMNT_GROSS_AMT,DUE_DT) VALUES (50000,00026133,1,0000121312,'R',100.000,100.000,'2018-06-28 00:00:00.000');
INSERT INTO mytable(BUSINESS_UNIT,VOUCHER_ID,PYMNT_CNT,PYMNT_ID,PYMNT_TYPE,PAID_AMT,PYMNT_GROSS_AMT,DUE_DT) VALUES (50000,00026134,1,0000121309,'R',100.000,100.000,'2018-06-28 00:00:00.000');
INSERT INTO mytable(BUSINESS_UNIT,VOUCHER_ID,PYMNT_CNT,PYMNT_ID,PYMNT_TYPE,PAID_AMT,PYMNT_GROSS_AMT,DUE_DT) VALUES (50000,00026135,1,0000121308,'R',100.000,100.000,'2018-08-02 00:00:00.000');
INSERT INTO mytable(BUSINESS_UNIT,VOUCHER_ID,PYMNT_CNT,PYMNT_ID,PYMNT_TYPE,PAID_AMT,PYMNT_GROSS_AMT,DUE_DT) VALUES (50000,00026136,2,NULL,'W',0.000,3.070,'2018-08-24 00:00:00.000');
INSERT INTO mytable(BUSINESS_UNIT,VOUCHER_ID,PYMNT_CNT,PYMNT_ID,PYMNT_TYPE,PAID_AMT,PYMNT_GROSS_AMT,DUE_DT) VALUES (50000,00026136,1,0000121314,'R',96.930,96.930,'2018-08-24 00:00:00.000');
INSERT INTO mytable(BUSINESS_UNIT,VOUCHER_ID,PYMNT_CNT,PYMNT_ID,PYMNT_TYPE,PAID_AMT,PYMNT_GROSS_AMT,DUE_DT) VALUES (50000,00026137,2,NULL,'W',0.000,30.700,'2018-09-04 00:00:00.000');
INSERT INTO mytable(BUSINESS_UNIT,VOUCHER_ID,PYMNT_CNT,PYMNT_ID,PYMNT_TYPE,PAID_AMT,PYMNT_GROSS_AMT,DUE_DT) VALUES (50000,00026137,1,0000121316,'R',969.300,969.300,'2018-09-04 00:00:00.000');
有了这个示例/模式,我想要的输出将是这样的:
BUSINESS_UNIT VOUCHER_ID PYMNT_CNT PYMNT_ID PYMNT_TYPE PAID_AMT PYMNT_GROSS_AMT DUE_DT
50000 26130 1 121315 R 969.3 969.3 6/29/2018
50000 26131 1 R 0 0 6/30/2018
50000 26132 1 R 0 1000 6/30/2010
50000 26133 1 121312 R 100 100 6/28/2018
50000 26134 1 121309 R 100 100 6/28/2018
50000 26135 1 121308 R 100 100 8/2/2018
50000 26136 1 121314 R 96.93 96.93 8/24/2018
50000 26137 1 121316 R 969.3 969.3 9/4/2018

