【发布时间】:2016-08-26 19:50:36
【问题描述】:
我编写了以下查询,但 CASE 语句返回的值不正确。当 soaddr 有一个值而不是从 soaddr 返回值时,它将从 arcust 返回不正确的值。但是,如果我更改 else 语句以从 soaddr 中提取值,那么它将返回一个 NULL 值。我做错了什么?
SELECT DISTINCT a.custno, b.company,
CASE WHEN c.address1 = NULL THEN b.address1
ELSE b.address1
END as address,
CASE WHEN c.city = NULL THEN b.city
ELSE b.city
END as city,
CASE WHEN c.addrstate = NULL THEN b.addrstate
ELSE b.addrstate
END as addrstate,
CASE WHEN c.zip = NULL THEN b.zip
ELSE b.zip
END as zip,
invno, descrip, qtyshp, price, extprice, b.tax, invdte
FROM artran a
LEFT JOIN arcust b ON a.custno = b.custno
LEFT JOIN soaddr c ON a.custno = c.custno
【问题讨论】:
-
当soaddr 不为空时,你不想要else c.address1 吗?或者你可以使用
coalesce(c.address1,b.address1)使用soaddr,否则使用arcust.address1。 -
我做了很多 ETL 工作,很多时候我不仅要检查文本值是否为 null,我还需要检查它是否为空字符串,因此我使用 ISNULL(
, '') 为空。请看msdn.microsoft.com/en-us/library/ms184325.aspx
标签: sql sql-server case