如果符合条件,则在列中列出条件

时间:2018-01-17 14:20:48

标签: sql tsql

我每天早上都收到一个文件,其中包含信息不符合特定条件的客户详细信息,我已经构建了一个包含许多WHERE条件的脚本,如果遇到这些条件,将向客户显示信息并将其放入文件中但是即时通讯无法找到 为什么 他们错了。

由于我在where子句中有很多条件,有没有办法显示哪个列有不正确的信息

例如,我可以有一个这样的表:

NAME|ADDRESS   |PHONE|COUNTRY
John|123avenue |12345|UK

我的条件可能是

SELECT * FROM CUSTOMERS 
WHERE NAME LIKE 'J%' 
AND LEFT(PHONE,1) = '1'

因此它会在文件中显示满足两个条件,但由于我有超过80行和40个条件,因此很难查看每一行并找出其中的原因。

有没有办法可以添加一个列,告诉我哪个WHERE条件已经满足?

1 个答案:

答案 0 :(得分:2)

如措辞,不。你应该改变你的逻辑。添加显示错误的字段,然后在WHERE子句中使用这些字段。

SELECT
  *,
  CASE WHEN LEFT(phone, 1) = '1' THEN 1 ELSE 0 END   AS phone_starts_with_1,
  CASE WHEN LEFT(name,  1) = 'Z' THEN 1 ELSE 0 END   AS name_starts_with_z
FROM
  customers
WHERE
     phone_starts_with_1 = 1
  OR name_starts_with_z = 1

根据您使用的SQL方言,您可能需要嵌套此方法,以便在WHERE子句中使用它们之前解析新字段...

SELECT
  *
FROM
(
  SELECT
    *,
    CASE WHEN LEFT(phone, 1) = '1' THEN 1 ELSE 0 END   AS phone_starts_with_1,
    CASE WHEN LEFT(name,  1) = 'Z' THEN 1 ELSE 0 END   AS name_starts_with_z
  FROM
    customers
)
  checks
WHERE
     phone_starts_with_1 = 1
  OR name_starts_with_z = 1