我有一个返回所有员工的SQL查询。它给了我一个错误,因为它期望在WITH( )
之后,它需要一个SELECT
语句。
但如果我想第二次过滤结果,我该如何使用IF-ELSE IF?
注意:我的SQL可能听起来有些混乱(即:如果@Gender =男性,寻找所有单个员工),因为这些是占位符,我代替了我的真实SQL。我为在命名方面没有太多创意而道歉。
DECLARE @Gender VARCHAR(10)
SET @Gender = 'Female'
/* Store all employees aged 50+ in a variable called queryResult */
WITH queryResult AS
(
SELECT * FROM Employees WHERE Age >= 50
)
/* If Gender = Male, I'm looking for all employees that are single */
IF @Gender = 'Male'
BEGIN
SELECT * From queryResult WHERE Status = 'Single'
END
/* If Gender = Female, I'm looking for all employees that are married */
ELSE IF @Gender = 'Female'
BEGIN
SELECT * From queryResult WHERE Status = 'Married'
END
已解决:如果您想查看我的真实查询,这是基于Rahul答案的工作查询。
WITH queryResult AS
(
SELECT TOP 1 t.userName, t.timeStamp
FROM [Tracking].[dbo].[Tracking] t join (SELECT URL, PrimaryOwner FROM Governance WHERE Content = @Content) g
ON t.referringURL like g.URL
WHERE
timeStamp >=
CASE WHEN @Frequency = 'Daily' THEN CAST(GETDATE() As Date)
WHEN @Frequency = 'Monthly' THEN DATEADD(month, -1, CAST(GETDATE() As Date))
WHEN @Frequency = 'Annually' THEN DATEADD(year, -1, CAST(GETDATE() As Date))
END
and PrimaryOwner = t.userName
ORDER BY timestamp desc
)
SELECT * from queryResult
答案 0 :(得分:3)
为什么不呢:
DECLARE @Gender VARCHAR(10)
SET @Gender = 'Female';
WITH queryResult AS
(
SELECT * FROM Employees WHERE Age >= 50
)
SELECT * From queryResult WHERE Gender = @Gender
编辑:
如果您的WHERE条款非常不同,那么最好将条件放在外面。将相同的cte或子查询放在倍数位置有点冒犯开发人员的眼睛,但它可能是正确的答案。
所以用你过于简单的例子来表明:
DECLARE @Gender VARCHAR(10)
SET @Gender = 'Female'
IF @Gender = 'Male'
BEGIN
;WITH queryResult AS
(
SELECT * FROM Employees WHERE Age >= 50
)
SELECT * From queryResult WHERE Gender = 'Male'
END
ELSE IF @Gender = 'Female'
BEGIN
;WITH queryResult AS
(
SELECT * FROM Employees WHERE Age >= 50
)
SELECT * From queryResult WHERE Gender = 'Female'
END
答案 1 :(得分:1)
为什么不在CTE本身进行过滤,如
IWorkbook workbook = WorkbookFactory.Create(inputStream);
编辑:在这种情况下,使用ISheet sheet = workbook.GetSheetAt(sheetIndex);
表达式更改您的CTE,如下所示
DECLARE @Gender VARCHAR(10)
SET @Gender = 'Female'
WITH queryResult AS
(
SELECT * FROM Employees WHERE Age >= 50 AND Gender = @Gender
)
select * from queryResult;
答案 2 :(得分:0)
你可以这样做:
DECLARE @Gender VARCHAR(10)
SET @Gender = 'Female'
WITH queryResult AS
(
SELECT * FROM Employees WHERE Age >= 50
)
select *
from queryResult
where
(@Gender = 'Male' and Status = 'Single')
or (@Gender = 'Female' and Status = 'Married')