如何在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