如何在where子句中使用Case语句赋值



我要实现的逻辑是,如果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

最新更新