我试图实现的逻辑是,如果greatPlainsUserId
不为null,则使用它,否则使用userName
,但我会收到语法错误。
...
WHERE (CASE
WHEN @greatPlainsUserId IS NULL
THEN BUYERID = @userName
ELSE BUYERID = @greatPlainsUserId
END)
AND...
答案 0 :(得分:4)
删除CASE
。只需使用简单的逻辑:
WHERE ((@greatPlainsUserId IS NULL AND BUYERID = @userName) OR
(BUYERID = @greatPlainsUserId)
)
第二个条件仅在@greatPlainsUserId IS NOT NULL
时有效,因此条件是多余的。
可替换地:
WHERE BUYERID = COALESCE(@greatPlainsUserId, @userName)
这可能是最简单的逻辑。
答案 1 :(得分:1)
只需使用ISNULL()
它将处理这两种情况。运行以下测试代码查看。如果IssCost不为null,则它将使用IssCost。如果它为null,则会显示“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