【发布时间】:2022-01-13 08:05:40
【问题描述】:
要求:
对于策略:至少一件商品 (RAP03.propid) 有折扣 (rap14.covid = 'SS') 并且至少一件商品没有折扣 (SS)。假设我们有一个策略 (rap01.plcy) ,并且使用这个策略我们有 2 个项目 (rap03.propid)。因此,一件物品 SS 应该在那里,一件物品 SS 不应该在那里。我在下面尝试过,但记录为零。有什么办法可以同时检查这两种情况。
我们还必须尊重政策和项目 (PROPID)。一个 propid 必须包含 SS,但另一个 propid 不得包含 SS。
要求的结果:
PLCY, PROPID, COVID
000000967428613 010 SS
000000967428613 011 BB
AND EXISTS
(SELECT 1
/*+ use_hash(RAP03 rap14) */
FROM rap03
JOIN rap14
ON rap14.j31_pt_line_cat_cd = rap01.j01_PT_LINE_CAT_CD
AND rap14.j31_pt_cdb_part_id = rap01.j01_PT_CDB_PART_ID
AND rap14.j31_pt_state_cd = rap01.j01_PT_STATE_CD
AND rap14.plcy = RAP01.plcy
AND rap14.propid = RAP03.propid
AND trim(rap14.covid) = 'SS'
AND tt.JA2_EFFDT_T BETWEEN rap14.enddt_t AND (rap14.dropdt_t - 1)
--
WHERE RAP03.J12_PT_LINE_CAT_CD = RAP01.J01_PT_LINE_CAT_CD
AND RAP03.J12_PT_CDB_PART_ID = RAP01.J01_PT_CDB_PART_ID
AND RAP03.J12_PT_STATE_CD = RAP01.J01_PT_STATE_CD
AND RAP03.PLCY = RAP01.PLCY
AND tt.JA2_EFFDT_T BETWEEN rap03.adddt_t AND (rap03.dropdt_t - 1)
)
--
AND NOT EXISTS
(SELECT 1
/*+ use_hash(RAP03 rap14) */
FROM rap03
JOIN rap14
ON rap14.j31_pt_line_cat_cd = rap01.j01_PT_LINE_CAT_CD
AND rap14.j31_pt_cdb_part_id = rap01.j01_PT_CDB_PART_ID
AND rap14.j31_pt_state_cd = rap01.j01_PT_STATE_CD
AND rap14.plcy = RAP01.plcy
AND rap14.propid = RAP03.propid
AND trim(rap14.covid) = 'SS'
AND tt.JA2_EFFDT_T BETWEEN rap14.enddt_t AND (rap14.dropdt_t - 1)
--
WHERE RAP03.J12_PT_LINE_CAT_CD = RAP01.J01_PT_LINE_CAT_CD
AND RAP03.J12_PT_CDB_PART_ID = RAP01.J01_PT_CDB_PART_ID
AND RAP03.J12_PT_STATE_CD = RAP01.J01_PT_STATE_CD
AND RAP03.PLCY = RAP01.PLCY
AND tt.JA2_EFFDT_T BETWEEN rap03.adddt_t AND (rap03.dropdt_t - 1)
)
【问题讨论】:
-
请edit 提出minimal reproducible example 的问题,包括:
CREATE TABLE表的声明;一些样本数据的INSERT语句;您正在使用的我们可以运行的查询的完整(和最小)示例;问题的英文(非代码)解释;您的代码的问题/错误;以及该样本数据的预期输出。