嵌套where语句



是否有一种方法来构建WHERE语句像这个伪代码一样?有点像嵌套的WHERE语句?

SELECT
t.Val1
,t.Val2
,t.Val3
,t.Val4
,t.Val5
FROM table t
WHERE
IF t.Val1 = 'ABC' 
THEN WHERE t.Val2 = t.Val3
ELSE
WHERE t.Val4 = t.Val5
使用MS SQL Server

使用布尔逻辑:

WHERE (t.Val1 = 'ABC' AND t.Val2 = t.Val3) OR
(t.Val1 <> 'ABC' AND t.Val4 = t.Val5)

此公式假定val1永远不是NULL——NULL值在必要时很容易处理。

第三种替代方案是IIF表达式。

DROP TABLE IF EXISTS #Test;
CREATE TABLE #Test
(
TestID TINYINT PRIMARY KEY
,Val1 VARCHAR(3)
,Val2 INT
,Val3 INT
,Val4 INT
,Val5 INT
)
;
GO
INSERT INTO #Test
VALUES
(1, 'ABC', 1, 1, 1, 2)
,(2, 'ABC', 1, 2, 2, 2)
,(3, 'XYZ', 1, 1, 1, 2)
,(4, 'XYZ', 1, 2, 2, 2)
;
SELECT
*
FROM #Test
WHERE IIF(Val1 = 'ABC', Val2, Val4) = IIF(Val1 = 'ABC', Val3, Val5)
;

你可以用case语句代替where条件。甚至可以创建计算列按大小写语句,如下面的链接:

https://blog.sqlauthority.com/2016/04/27/sql-server-computed-column-conditions-case-statement/

相关内容

  • 没有找到相关文章

最新更新