我需要在查询中添加一些条件逻辑,如果一行具有相同的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 same
BUSINESS_UNIT and
VOUCHER_ID`的行。
从本质上讲,正在发生两次付款应用于同一凭单/业务部门的情况,但是我不希望附加行(其中有重复项)不包含{{1}的“ PA1” }
结果将包括来自第一个查询的数据以及第二个查询中的第二行。是否有一种无需使用CTE即可完成此操作的方法?
编辑:
或者,有没有一种方法可以进行自我连接并为WTHD_RULE
创建一个新列,其中WTHD_RULE等于'PA1'?
编辑2:
WTHD_AMT
有了这个样本/模式,我想要的输出将是这样的:
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');
答案 0 :(得分:0)
您从示例数据中删除了WTHD_RULE
...但是如果存在,则可以使用窗口函数来执行此操作。另外,在示例数据中,由于PK不能包含重复项,因此PRIMARY KEY
无效。
select
*
FROM(
select
*
,RN = row_number() over (partition by BUSINESS_UNIT, VOUCHER_ID order by case when WTHD_RULE = 'PA1' then 1 else 2 end)
from
myTable
) x
where x.RN = 1