簡體   English   中英

SQL Server:避免子查詢

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM