如何在where子句中使用Case语句赋值
How to assign value using Case statement in where clause
我试图实现的逻辑是,如果 greatPlainsUserId
不为空则使用它,否则使用 userName
但我遇到语法错误。
...
WHERE (CASE
WHEN @greatPlainsUserId IS NULL
THEN BUYERID = @userName
ELSE BUYERID = @greatPlainsUserId
END)
AND...
删除 CASE
。只需使用简单的逻辑:
WHERE ((@greatPlainsUserId IS NULL AND BUYERID = @userName) OR
(BUYERID = @greatPlainsUserId)
)
第二个条件仅在 @greatPlainsUserId IS NOT NULL
时有效,因此该条件是多余的。
或者:
WHERE BUYERID = COALESCE(@greatPlainsUserId, @userName)
这可能是最简单的逻辑了。
只需使用ISNULL()
,这两种情况都能解决。 运行 下面测试代码看看。如果 IssCost 不为空,它将使用 IssCost。如果它是空的,它会说 "Boooo!"
抱歉我懒惰的示例数据,我已经制作了数据并且不想修改太多:)
CREATE TABLE Payroll (
EmployeeID int NULL
,PlanCode varchar(10) NULL
,IssCost varchar(10) NULL
)
GO
INSERT INTO Payroll (EmployeeID, PlanCode, IssCost)
VALUES (1, 'Medical', '200')
,(1, 'Dental', '250')
,(1, 'Vision', '300')
,(2, 'Medical', '100')
,(2, 'Dental', '150')
,(2, 'Vision', NULL)
SELECT EmployeeID
,PlanCode
,ISNULL( IssCost, 'Boooo!')
FROM Payroll
我试图实现的逻辑是,如果 greatPlainsUserId
不为空则使用它,否则使用 userName
但我遇到语法错误。
...
WHERE (CASE
WHEN @greatPlainsUserId IS NULL
THEN BUYERID = @userName
ELSE BUYERID = @greatPlainsUserId
END)
AND...
删除 CASE
。只需使用简单的逻辑:
WHERE ((@greatPlainsUserId IS NULL AND BUYERID = @userName) OR
(BUYERID = @greatPlainsUserId)
)
第二个条件仅在 @greatPlainsUserId IS NOT NULL
时有效,因此该条件是多余的。
或者:
WHERE BUYERID = COALESCE(@greatPlainsUserId, @userName)
这可能是最简单的逻辑了。
只需使用ISNULL()
,这两种情况都能解决。 运行 下面测试代码看看。如果 IssCost 不为空,它将使用 IssCost。如果它是空的,它会说 "Boooo!"
抱歉我懒惰的示例数据,我已经制作了数据并且不想修改太多:)
CREATE TABLE Payroll (
EmployeeID int NULL
,PlanCode varchar(10) NULL
,IssCost varchar(10) NULL
)
GO
INSERT INTO Payroll (EmployeeID, PlanCode, IssCost)
VALUES (1, 'Medical', '200')
,(1, 'Dental', '250')
,(1, 'Vision', '300')
,(2, 'Medical', '100')
,(2, 'Dental', '150')
,(2, 'Vision', NULL)
SELECT EmployeeID
,PlanCode
,ISNULL( IssCost, 'Boooo!')
FROM Payroll