输入查询:
SELECT a.ml_STi_File_id as File_ID, a.ML_STI_SRC_SYS_CD as Src_CD, concat(a.EVENT_CD,a.BUS_AREA_CD) as BE
FROM FFI_ERR_RLT_TRN a, summary_tbl b
WHERE a.ml_sti_src_sys_cd = b.ml_sti_src_sys_cd
AND a.ml_sti_load_dttm = b.ml_sti_load_dttm
AND a.ml_sti_cycle_cd = b.ml_sti_cycle_cd
AND a.ml_sti_file_id = b.ml_sti_file_id
AND a.ml_sti_srcsys_dttm = b.ml_sti_srcsys_dttm
AND a.ML_STI_CYCLE_CD = '0519201701'
group BY a.ML_STI_SRC_SYS_CD, a.ml_STi_File_id, a.BUS_AREA_CD,a.EVENT_CD, a.ml_sti_cycle_cd
order by a.ml_sti_src_sys_cd desc;
输入:
FILE_ID SRC BE
-------- --- ------------------------
00428589 631
00428581 623 FTE
00428581 623 FTI
00428581 623 PRP
00428581 623 SPA
00428568 029
所需的输出:
FILE_ID SRC BE
-------- --- ------------------------
00428589 631
00428581 623 PRP
00428581 623 SPA
00428568 029
有人可以帮我这个吗?
提前致谢。
我正在使用oracle SQL。
使用上述查询获取输入数据。从输入数据我必须过滤掉输出如上所示
答案 0 :(得分:0)
如果您显示为"输入"是现有查询的结果,您可以通过向现有WHERE子句添加条件来过滤掉不需要的行。像
这样的东西... [top part of your query here] ...
WHERE
...
AND ( concat(a.EVENT_CD,a.BUS_AREA_CD) is null
or (a.ML_STI_SRC_SYS_CD, concat(a.EVENT_CD,a.BUS_AREA_CD))
not in
( (623, 'FTE'), (623, 'FTI'), (623, 'PYT'),
(625, 'FTE'), (625, 'FTI'),
(626, 'FTE'), (626, 'FTI'),
(628, 'FTE'), (628, 'FTI')
)
)
.......
请注意,我特意处理了BE为空时的情况(根据您所描述的内容,不应排除这些行)。我没有处理SRC_CD为空,但如果它在数据中可以为null,则还需要处理它。另请注意,SELECT子句中给出的别名不能在WHERE子句中使用,您需要使用我所显示的完整定义(或者您可以使用子查询 - 外部查询结构,效率较低)。
如果将所有异常(NOT IN条件中的内容)存储在表中会更好;然后NOT IN条件会更简单,引用该表而不是硬编码异常。