为什么我的合并功能不起作用

时间:2014-05-08 16:22:15

标签: sql sql-server-2008 tsql

我有查询:

SELECT   Stage1
        ,Stage2
        ,Stage3 
FROM dbo.Cases
WHERE Number='6913'

结果:

Stage1  Stage2      Stage3
==========================
NULL    Settlement  Stage1

但是当我尝试时:

SELECT COALESCE(Stage1 ,Stage2 ,Stage3) AS [Exit]
FROM   dbo.Cases
WHERE  Number = '6913'

结果仍为NULL:

EXIT    
====
NULL

为什么会这样,结果应该是'结算'

请有人可以帮忙????

4 个答案:

答案 0 :(得分:1)

我能想到的唯一解释是你的Stage1字段中的字符串值为NULL。查看此查询是否返回您的行以确定是否是这种情况:

SELECT   Stage1
        ,Stage2
        ,Stage3 
FROM dbo.Cases
WHERE Number='6913'
AND Stage1 = 'NULL'

如果字符串值为NULL,您可以尝试:

SELECT   COALESCE(NULLIF(Stage1, 'NULL'), NULLIF(Stage2, 'NULL'), NULLIF(Stage3, 'NULL'))           
FROM dbo.Cases
WHERE Number='6913'

答案 1 :(得分:1)

检查该值是否为实际NULL而不是varchar值' NULL'。

你可以这样做:

SELECT * FROM dbo.Cases WHERE Stage1 IS NULL

SELECT * FROM dbo.Cases WHERE Stage1 = 'NULL'

看看会发生什么。

答案 2 :(得分:0)

您可以采取其他一些措施来删除NULLS。

过滤掉空值:

SELECT   Stage1
        ,Stage2
        ,Stage3 
FROM dbo.Cases
WHERE Number='6913'
  AND State1 IS NOT NULL
当Stage1为null时,

或放置并清空字符串:

SELECT   ISNULL(Stage1, '')
        ,Stage2
        ,Stage3 
FROM dbo.Cases
WHERE Number='6913'

答案 3 :(得分:0)

我有同样的奇怪行为。我认为问题不在于COALESCE()函数,而在于属性/列中的值。

在我的情况下,该值似乎为NULL,并且数据流的方式应该为NULL。但是,Postgres WHERE子句或COALESCE()函数都不会将该值解释为NULL。我真的不知道这是什么价值。

我的kluge解决方案是获取值的MD5哈希,并在我的查询逻辑中使用MD5。我真的不知道该属性的实际/内部值是多少,但是我们可以计算MD5哈希并将其用作代理。

, COALESCE(
          CASE WHEN md5(value1) <> 'd41d8cd98f00b204e9800998ecf8427e' THEN value1 ELSE NULL END
        , CASE WHEN md5(value2) <> 'd41d8cd98f00b204e9800998ecf8427e' THEN value2 ELSE NULL END
        , CASE WHEN md5(value3) <> 'd41d8cd98f00b204e9800998ecf8427e' THEN value3 ELSE NULL END
    ) AS desired_value