【问题标题】:DECODE - REMOVE NULLs解码 - 删除 NULL
【发布时间】:2014-03-06 18:03:55
【问题描述】:

请帮我从两列中删除空值

SELECT Decode(pk.property_name, 'msisdn', pv.text_value) MSISDN,
Decode(pk.property_name, 'BAN', pv.text_value) BAN
FROM PROPERTY_VALUE pv, PROPERTY_KEY pk 
WHERE pv.entity_id IN 
(select entity_id from property_value pv where pv.text_value in('ConsumerUnauthenticated')) 
and pv.property_key_id = pk.property_key_id 

这会产生一个表 MSISDN 和 BAN。这两个列都包含 NULL 和 NOT NULL 值。我想从结果表中消除 NULL。请帮忙。

BAD - 

MSISDN    BAN
null      xyz
null      abc
1213      null
null      def
1211      null

我希望我的结果是

MSISDN    BAN
1213      xyz
1211      abc
          def

【问题讨论】:

  • 你使用的是什么服务器?
  • Oracle DB 11g - 不确定
  • 但是您的要求和以上查询不匹配?你到底想要什么?你想用上面的查询做什么?
  • 我从上面写的查询中得到了结果。现在我不知道下一步该做什么
  • 您的结果似乎不符合正常的数据库数据结构。您的 desired 输出表明您无缘无故地强制 MSISDN = 1213BNA = xyz 关联,并且 BAN = defnothing 关联,但不知何故它与 @987654328 不同@。您真的想要 两个 输出表吗?唯一的非空 MSISDN 之一,以及唯一的非空 BAN 之一?

标签: sql oracle decode


【解决方案1】:

你真的不应该那样做。检查您的问题下的 cmets。但这里是查询:

SELECT MSISDN, BAN
FROM (
    SELECT pv.text_value MSISDN, rownum rn
    FROM PROPERTY_VALUE pv, PROPERTY_KEY pk 
    WHERE pv.entity_id IN (select entity_id from property_value pv where pv.text_value in('ConsumerUnauthenticated')) 
    AND pv.property_key_id = pk.property_key_id
    AND pk.property_name = 'msisdn'
    AND pv.text_value IS NOT NULL
) FULL OUTER JOIN (    
    SELECT pv.text_value BAN, rownum rn
    FROM PROPERTY_VALUE pv, PROPERTY_KEY pk 
    WHERE pv.entity_id IN (select entity_id from property_value pv where pv.text_value in('ConsumerUnauthenticated')) 
    AND pv.property_key_id = pk.property_key_id
    AND pk.property_name = 'ban'
    AND pv.text_value IS NOT NULL
) USING (rn)
ORDER BY rn;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-20
    • 2013-12-26
    • 1970-01-01
    • 2018-07-03
    • 2018-05-12
    • 2014-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多