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

时间:2016-10-19 16:16:34

标签: sql sql-server tsql ssms

我试图实现的逻辑是,如果greatPlainsUserId不为null,则使用它,否则使用userName,但我会收到语法错误。

    ...
    WHERE (CASE
    WHEN @greatPlainsUserId IS NULL 
    THEN BUYERID = @userName 
    ELSE BUYERID = @greatPlainsUserId
    END)
    AND...

2 个答案:

答案 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