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