筛选字符串文字时排除空值

xtfmy6hx  于 2021-07-29  发布在  Java
关注(0)|答案(3)|浏览(339)

我有下面的查询,我打算过滤/排除 WHERE 范围类型或市场概念等于字符串文字“placeholder”。我们发现,由于反馈,我们实际上也排除了那些字段所在的任何示例 NULL . 这让我有些惊讶,有什么建议可以解释吗?
查询:

  1. SELECT DISTINCT M.MATERIAL,
  2. A.MARKET_CONCEPT,
  3. A.RANGE_TYPE
  4. FROM VW_MRP_ALLOCATION_COMBINED M
  5. JOIN VW_ARTICLE_ATTRIBUTES_COMBINED A ON M.Material = A.Article AND M.SALES_ORGANIZATION = A.SALES_ORGANIZATION
  6. WHERE M.stock_type = ''
  7. AND A.market_concept <> 'PLACEHOLDER'
  8. AND A.RANGE_TYPE <> 'PLACEHOLDER'
  9. AND A.Article in ('BK0348',
  10. 'BQ2718',
  11. 'BQ2719',
  12. 'BS3674',
  13. 'CF3607',
  14. 'CF3608',
  15. 'CF3609',
  16. 'CF3610',
  17. 'CV5091',
  18. 'D94751',
  19. 'DH6911',
  20. 'DT5039')
  21. AND M.Sales_Organization = 6040;
eaf3rand

eaf3rand1#

空记录是使用“isnull”关键字绘制的,用于比较。下面是一个如何获取空记录的示例

  1. with data
  2. as (select 'PLACEHOLDER' as market_concept,'PLACEHOLDER' as range_type
  3. union all
  4. select 'MarketConcept1' as market_concept,'Rangetype1' as range_type
  5. union all
  6. select null as market_concept, null as range_type
  7. )
  8. select *
  9. from data
  10. where ((market_concept <> 'PLACEHOLDER'
  11. and range_type <>'PLACEHOLDER'
  12. )
  13. --This OR condition brings out the records which are null
  14. OR(market_concept is null
  15. and range_type is null
  16. )
  17. )
  18. +----------------+------------+
  19. | market_concept | range_type |
  20. +----------------+------------+
  21. | MarketConcept1 | Rangetype1 |
  22. | null | null |
  23. +----------------+------------+
展开查看全部
li9yvcax

li9yvcax2#

我建议说得明确点:

  1. (A.market_concept <> 'PLACEHOLDER' OR A.market_concept IS NULL) AND
  2. (A.RANGE_TYPE <> 'PLACEHOLDER' A.range_type IS NULL) AND

注:假设 'PLACEHOLDER' 不是 NULL . 如果可能的话,我建议问一个新问题,有清晰的样本数据和期望的结果。

tcomlyy6

tcomlyy63#

可以使用isnull函数将null值视为与占位符相同。

  1. SELECT DISTINCT M.MATERIAL,
  2. A.MARKET_CONCEPT,
  3. A.RANGE_TYPE
  4. FROM VW_MRP_ALLOCATION_COMBINED M
  5. JOIN VW_ARTICLE_ATTRIBUTES_COMBINED A ON M.Material = A.Article AND M.SALES_ORGANIZATION = A.SALES_ORGANIZATION
  6. WHERE M.stock_type = ''
  7. AND ISNULL(A.market_concept,'PLACEHOLDER') <> 'PLACEHOLDER'
  8. AND ISNULL(A.RANGE_TYPE,'PLACEHOLDER') <> 'PLACEHOLDER'
  9. AND A.Article in ('BK0348',
  10. 'BQ2718',
  11. 'BQ2719',
  12. 'BS3674',
  13. 'CF3607',
  14. 'CF3608',
  15. 'CF3609',
  16. 'CF3610',
  17. 'CV5091',
  18. 'D94751',
  19. 'DH6911',
  20. 'DT5039')
  21. AND M.Sales_Organization = 6040;
展开查看全部

相关问题