Sql 当语句使用where条件时,如何过滤CASE数据?

Sql 当语句使用where条件时,如何过滤CASE数据?,sql,sql-server,tsql,ssms,ssms-2012,Sql,Sql Server,Tsql,Ssms,Ssms 2012,当条件为列时,我们可以过滤该列吗 榜样 SELECT CASE WHEN Number like '20%' THEN 'X' WHEN Number like '15%' or Number like '16%' THEN 'Y' ELSE 'Z' END Operation ,* FROM TableA where Operation like 'X' 当条件为“Operation”时,我调用了CASE,现在我只想在Operation列中看到操作“X” 在

当条件为列时,我们可以过滤该列吗

榜样

SELECT 
    CASE WHEN Number like '20%' THEN 'X'
   WHEN Number like '15%' or  Number like '16%'  THEN 'Y' ELSE 'Z'
   END Operation
   ,*
FROM 
TableA
where Operation like 'X'
当条件为“Operation”时,我调用了CASE,现在我只想在Operation列中看到操作“X”

在SSMS 2012中,当条件为where子句时,是否有方法过滤大小写?

将查询包装为派生表,然后可以将新列放入where子句中:

将查询包装为派生表,然后可以将新列放入WHERE子句中:

必须在WHERE子句中重复大小写表达式,或将其嵌套在另一个SELECT语句中。

必须在WHERE子句中重复大小写表达式,或将其嵌套在另一个SELECT语句中。

您可以使用APPLY:

如果您还有其他过滤器,这将很有帮助。然而,只有像“20%”这样的数字才可以

您可以使用应用:


如果您还有其他过滤器,这将很有帮助。然而,只有像“20%”这样的数字才可以

根据您要应用的条件,您的声明等效于:

SELECT 'X' AS Operation, *
FROM 
TableA
where Number like '20%'

根据您要应用的条件,您的声明相当于:

SELECT 'X' AS Operation, *
FROM 
TableA
where Number like '20%'

不能在where ondition.中使用列别名。。如果需要,您可以在结果值或子查询上使用该操作

SELECT 
    CASE WHEN Number like '20%' THEN 'X'
   WHEN Number like '15%' or  Number like '16%'  THEN 'Y' ELSE 'Z'
   END Operation
   ,*
FROM  TableA
HAVING Operation like 'X'
子查询和where

select operation from (

  SELECT 
      CASE WHEN Number like '20%' THEN 'X'
     WHEN Number like '15%' or  Number like '16%'  THEN 'Y' ELSE 'Z'
     END Operation
     ,*
  FROM  TableA

  ) t 
  where operation = 'X'
否则,对于where子句中的case,应该重用相同的代码

SELECT 
    CASE WHEN Number like '20%' THEN 'X'
   WHEN Number like '15%' or  Number like '16%'  THEN 'Y' ELSE 'Z'
   END Operation
   ,*
FROM  TableA
 WHERE  CASE WHEN Number like '20%' THEN 'X'
   WHEN Number like '15%' or  Number like '16%'  THEN 'Y' ELSE 'Z'
   END like 'X'

不能在where ondition.中使用列别名。。如果需要,您可以在结果值或子查询上使用该操作

SELECT 
    CASE WHEN Number like '20%' THEN 'X'
   WHEN Number like '15%' or  Number like '16%'  THEN 'Y' ELSE 'Z'
   END Operation
   ,*
FROM  TableA
HAVING Operation like 'X'
子查询和where

select operation from (

  SELECT 
      CASE WHEN Number like '20%' THEN 'X'
     WHEN Number like '15%' or  Number like '16%'  THEN 'Y' ELSE 'Z'
     END Operation
     ,*
  FROM  TableA

  ) t 
  where operation = 'X'
否则,对于where子句中的case,应该重用相同的代码

SELECT 
    CASE WHEN Number like '20%' THEN 'X'
   WHEN Number like '15%' or  Number like '16%'  THEN 'Y' ELSE 'Z'
   END Operation
   ,*
FROM  TableA
 WHERE  CASE WHEN Number like '20%' THEN 'X'
   WHEN Number like '15%' or  Number like '16%'  THEN 'Y' ELSE 'Z'
   END like 'X'
只是另一种选择

使用CTE

WITH CTE AS
(
  SELECT 
      CASE WHEN Number like '20%' THEN 'X'
     WHEN Number like '15%' or  Number like '16%'  THEN 'Y' ELSE 'Z'
     END Operation
     ,*
  FROM 
  TableA
)
SELECT *
FROM CTR
WHERE Operation = 'X';
用例表达式

SELECT 
    CASE WHEN Number like '20%' THEN 'X'
   WHEN Number like '15%' or  Number like '16%'  THEN 'Y' ELSE 'Z'
   END Operation
   ,*
FROM 
TableA
WHERE CASE WHEN Number like '20%' THEN 'X'
           WHEN Number like '15%' or  Number like '16%'  THEN 'Y' 
           ELSE 'Z'
      END = 'X';
现在,让我们看看


我实际上有多个CASE-WHEN语句,但使用数字作为过滤条件也很简单

好的,数字列不需要大小写表达式

只是另一种选择

使用CTE

WITH CTE AS
(
  SELECT 
      CASE WHEN Number like '20%' THEN 'X'
     WHEN Number like '15%' or  Number like '16%'  THEN 'Y' ELSE 'Z'
     END Operation
     ,*
  FROM 
  TableA
)
SELECT *
FROM CTR
WHERE Operation = 'X';
用例表达式

SELECT 
    CASE WHEN Number like '20%' THEN 'X'
   WHEN Number like '15%' or  Number like '16%'  THEN 'Y' ELSE 'Z'
   END Operation
   ,*
FROM 
TableA
WHERE CASE WHEN Number like '20%' THEN 'X'
           WHEN Number like '15%' or  Number like '16%'  THEN 'Y' 
           ELSE 'Z'
      END = 'X';
现在,让我们看看


我实际上有多个CASE-WHEN语句,但使用数字作为过滤条件也很简单

好的,数字列不需要大小写表达式


为什么不直接在20%这样的数字上?因为你过滤的结果集不需要大小写表达式,只需要“X”作为运算,我实际上有多个CASE-WHEN语句,但是使用Number作为过滤条件也很简单。谢谢@SamiWhy不仅仅是直接的数字,比如“20%”?因为你过滤的结果集不需要大小写表达式,只需要“X”作为运算,我实际上有多个CASE-WHEN语句,但是使用Number作为过滤条件也很简单。谢谢@samismply Operation='X'Simply Operation='X'aaah nice one forpas:DAaaah nice one forpas:D