[英]SQL Server : Avoid Subquery
我想避免以下查詢中的子查詢:
SELECT ID,[Start_Date],[End_Date],Assignment_Id
FROM (
SELECT ID, MIN([Start_Date]) AS [Start_Date], MAX([End_Date]) AS [End_Date]
FROM EmployeeTable
WHERE ID IN (123456) AND ([status] ='A' OR ([status] ='C'))
GROUP BY ID, Assignment_Id
) T
WHERE [End_date] >= CONVERT(VARCHAR(10),GETDATE(),120)
請在上面提出建議。
提前致謝。
嘗試這個:
SELECT ID, MIN([Start_Date]) AS [Start_Date], MAX([End_Date]) AS [End_Date]
FROM EmployeeTable
WHERE ID IN (123456) AND ([status] ='A' OR ([status] ='C'))
GROUP BY ID, Assignment_Id
HAVING MAX([End_Date]) >= CONVERT(VARCHAR(10),GETDATE(),120)
您可以在進行聚合后立即將having
where
子句的外部where
子句轉換where
並且不需要使用OR
也可以使用IN
子句直接表達它:
SELECT ID, MIN([Start_Date]) AS [Start_Date], MAX([End_Date]) AS [End_Date]
FROM EmployeeTable
WHERE ID = 123456 AND [status] IN ('A','C')
GROUP BY ID, Assignment_Id
HAVING MAX([End_Date]) >= CAST(GETDATE() AS DATE);
SQL中的HAVING子句指定SQL SELECT語句僅應返回聚集值滿足指定條件的行。 它被添加到SQL語言中,因為WHERE關鍵字不能與聚合函數一起使用。 通過使用having
條款因為你已經通過使用組,使您可以輕松地使用您可以過濾你的數據having
,@喬已經表現出在他的查詢如何使用
SELECT ID,Assignment_Id, MIN([Start_Date]) AS [Start_Date], MAX([End_Date]) AS [End_Date]
FROM EmployeeTable
WHERE ID IN (123456) AND ([status] ='A' OR ([status] ='C'))
GROUP BY ID, Assignment_Id
HAVING MAX([End_Date]) >= CONVERT(VARCHAR(10),GETDATE(),120)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.