我有两个 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 语句?
使用条件逻辑
AND ((
@UseFirstOne = 1
AND emp.BirthYear = @BirthYearFromParam
) OR (
@UseFirstOne = 0
AND (
emp.BirthYear < @CurrentYear
OR (
emp.BirthYear = @CurrentYear
AND emp.BirthMonth < @CurrentMonth
))
))
您需要进行代数思考,并使用括号来强制执行您想要的逻辑顺序。考虑:
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
)