在涉及不同比较运算符的 JOIN 子句中组合 CASE 表达式

问题描述 投票:0回答:2

我有两个 SELECT 语句,并希望根据输入参数将它们组合成一个 JOIN 语句:@UseFirstOne = true。 如果 @UseFirstOne 为 true,则我们在第一个条件下加入,如果为 false,则我们在第二个条件下加入。

1.

    JOIN X.[Employee] emp 
     ON emp.EmployeeId = @EmployeeId
     AND emp.BirthYear = @BirthYearFromParam
    JOIN X.[Employee] emp 
     ON emp.EmployeeId = @EmployeeId
     AND emp.BirthYear < @CurrentYear OR (emp.BirthYear = @CurrentYear AND emp.BirthMonth < @CurrentMonth)

如何将它们组合成一个 JOIN 语句?

sql sql-server join case inner-join
2个回答
-1
投票

使用条件逻辑

AND ((
  @UseFirstOne = 1
  AND emp.BirthYear = @BirthYearFromParam
) OR (
  @UseFirstOne = 0
  AND (
    emp.BirthYear < @CurrentYear
    OR (
      emp.BirthYear = @CurrentYear
      AND emp.BirthMonth < @CurrentMonth
  ))
))

-2
投票

您需要进行代数思考,并使用括号来强制执行您想要的逻辑顺序。考虑:

DECLARE @UseFirstOne BIT = 0, @BirthYearFromParam INT = 2000

SELECT *
  FROM Customers
 WHERE 
      (
           DATEPART(YEAR,BirthDate) = @BirthYearFromParam 
       AND @UseFirstOne = 1
      )
      OR 
      (
           (
                DATEPART(YEAR,BirthDate) < DATEPART(YEAR,GETDATE())
             OR (
                     DATEPART(YEAR,BirthDate) =  DATEPART(YEAR,GETDATE())
                 AND DATEPART(MONTH,BirthDate) < DATEPART(MONTH,GETDATE())
                )
           )
       AND @UseFirstOne = 0
      )
© www.soinside.com 2019 - 2024. All rights reserved.