SQL Server 2008R2:评估三列case语句还是合并?

时间:2015-04-30 12:54:46

标签: sql-server-2008-r2 nested-queries

我一直在努力弄清楚如何在几天内完成以下工作: 我有一张桌子有备用地址,但我只需要拉城。但是,该城市可能位于field5,field4或field3中。我想做的,并且悲惨地失败了,就是通过评估<>的三个字段来填充另一个名为city的字段。 NULL。

这是我到目前为止,虽然我没有收到任何错误,但唯一出现的值是field4,因为field5为null或''。但是,如果field4也为null,则city字段为空。出于某种原因,我的查询不是在查看field3,如果有值,则不会填充该值。请帮忙!

这是第一次尝试: altcity ='Y'和(field5 IS null或field5 ='')的情况 然后field4 else     altcity ='Y'和(field4 IS null或field4 ='')的情况     然后是field3         else field5     结束 结束为城市< - Field5或Field4应该显示,但如果两个字段都为空,则该字段为空。看起来好像查询没有查看field3。

这是第二次尝试:

case when altcity='y' then coalesce(field5,field4,field3) end as city

此处,填充field5或field4中的值,但field3的值不填充。

非常感谢您的协助!

1 个答案:

答案 0 :(得分:0)

有点长手,但是在针对您的数据运行时会出现以下情况:

CASE 
    WHEN altcity='y' THEN   
                        CASE
                            WHEN field5 is not null AND field5 != '' THEN field5
                            WHEN ((field5 is null) OR (field5 = '')) and ((field4 is not null) AND (field4 != ''))  then field4
                            WHEN (((field5 is null) OR (field5 = '')) and ((field4 is null) OR (field4 = ''))) and ((field3 is not null) AND (field3 != '')) then field3
                            ELSE '?'
                        END
    END

看过您的数据示例后,COALESCE无法正常工作,因为它依赖于数据中的NULL。在C#中有一个字符串函数IsNullOrEmpty来处理这些情况。 T-SQL没有这个,但是像this这样的例子有助于创建该功能并可以整理案例陈述