繁体   English   中英

SQL选择查询以排除值

[英]SQL select query for excluding values

输入查询:

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。

使用上面的查询来获取输入数据。 从输入数据中,我必须过滤出输出,如上所示

如果显示为“输入”的内容是现有查询的结果,则可以通过在现有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为null的情况(根据您的描述,不应排除那些行)。 我没有处理SRC_CD为空,但是如果您的数据中它可以为空,那么您也需要处理它。 还要注意,不能在WHERE子句中使用SELECT子句中给出的别名,您需要使用完整的定义(或者可以使用子查询-外部查询结构,效率较低)。

如果所有异常(处于NOT IN条件下)都存储在表中会更好。 那么NOT IN条件将简单得多,它引用该表而不是对异常进行硬编码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM