Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如果满足条件,则列中列出条件_Sql_Tsql - Fatal编程技术网

Sql 如果满足条件,则列中列出条件

Sql 如果满足条件,则列中列出条件,sql,tsql,Sql,Tsql,我每天早上都会收到一个文件,其中包含不符合特定标准的客户信息的详细信息。我已经建立了一个脚本,其中包含许多条件,如果满足这些条件,将显示客户信息并将其放入文件中,但我很难找出他们错误的原因 我在where子句中有很多条件,有没有办法显示哪一列的信息不正确 例如,我可以有这样一个表: NAME|ADDRESS |PHONE|COUNTRY John|123avenue |12345|UK 我的情况可能是 SELECT * FROM CUSTOMERS WHERE NAME LIKE 'J%

我每天早上都会收到一个文件,其中包含不符合特定标准的客户信息的详细信息。我已经建立了一个脚本,其中包含许多条件,如果满足这些条件,将显示客户信息并将其放入文件中,但我很难找出他们错误的原因

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

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

NAME|ADDRESS   |PHONE|COUNTRY
John|123avenue |12345|UK
我的情况可能是

SELECT * FROM CUSTOMERS 
WHERE NAME LIKE 'J%' 
AND LEFT(PHONE,1) = '1'
当两个条件都满足时,它会显示在文件中,但由于我有80多行和40个条件,很难查看每一行并找出其原因


有什么方法可以添加一列来告诉我在哪里满足了条件吗?

如前所述,没有。你应该颠倒你的逻辑。添加显示错误的字段,然后在
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

标记您正在使用的DBMS(SQL Server、MySQL、PostgreSQL等)。@Valerica UpdateTracle不使用TSQL,它使用PL/SQL@MatBailie我想知道,对于TSQL和Oracle,Oracle没有
left()
,因此我假设这是SQL Server。如果是Oracle,则需要选择
customer.*,…
,因为它将出现错误,出现不固定的
*,
。但是
left()。我将把它作为作业的练习;)