【问题标题】:SQL Case when on various field, with varying data availibility不同领域的 SQL 案例,具有不同的数据可用性
【发布时间】:2020-09-28 14:24:34
【问题描述】:

这是我在这里的第一个问题,我觉得这是一个愚蠢的问题,但我似乎无法正确回答。

我有一个包含 4x 地址线 [Addr1]、[Addr2]、[Addr3]、[Addr4] 的表格。

我需要查询这些数据并将其重新排列为 2x 字段而不是 4 个字段,即 [City] 和 [Street]。这些 4x 字段从未在 UI 上正确或一致地完成,因此实际城市可能位于 Addr2、3 或 4 中。

现在我尝试了下面的代码,但我一定做错了,因为即使我在 Addr4 和 Addr3 中没有数据,我仍然没有在我的新 [City] 字段中获得 Addr2。我觉得答案肯定很明显,但我还是个菜鸟,所以希望有人能帮助我吗?

        case when Addr4 = '' then Addr3
     when Addr4 = '' and Addr3 = '' then Addr2
     else Addr4
  end as City

【问题讨论】:

    标签: sql


    【解决方案1】:

    试试这个

       select COALESCE(Addr4,Addr3,Addr2,Addr1) as City from table.
       -- or select NVL(Addr4,Addr3,Addr2,Addr1) as City from table.
    

    值可能是 NULL 而不是空白。

    【讨论】:

    • 非常感谢!我测试了它,值是空白而不是 NULL,但我完全忘记了 COALESCE 以及它在这里的工作情况,所以我使用 NULLIF 将值更改为 NULL 并将其包装在 COALESCE 中,我得到了我所需要的- 非常感谢! :) coalesce(nullif(Addr4, ''), nullif(Addr3, ''), nullif(Addr2, '')) as City , Addr1 + ' ' + Addr2 as Street
    猜你喜欢
    • 1970-01-01
    • 2014-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多