내 SELECT 절에 이미있는 ORDER 절에 계산식이나 하위 쿼리를 사용할 때 SQL에서 해당 열의 순서 만 알면됩니까? 또는 정렬 할 때 각 행마다 모든 항목을 다시 계산합니까? 나는,이 쿼리가 더 나은 작성하는 방법을 알고Order By 절이 SQL Server의 값을 다시 계산합니까?
SELECT EmployeeName, (SELECT COUNT(*) FROM Employee e2 WHERE MgrID = Employee.EmployeeID)
FROM Employee
ORDER BY (SELECT COUNT(*) FROM Employee e2 WHERE MgrID = Employee.EmployeeID)
네 그리고 나는 나의 순서 서수를 사용하는 방법을 알고 by-- : 예를 들어
, 나는 이런 끔찍한 쿼리를 쓰고 말할 수 하지만 내가하지 않으면 어떡하지? SQL은 각 행에 대해이 하위 쿼리를 다시 실행합니까, 아니면 이미 col 2에있는 값을 사용할 수 있다는 것을 알고 있습니까?
기능을 사용하는 열에 대해 주문하는 것은 어떻습니까?
SELECT EmployeeName, LTRIM(RTRIM(BranchName)) FROM Employee
ORDER BY LTRIM(RTRIM(BranchName))
내 BranchName 열을 다시 정렬하여 정렬합니까?
일부 실행 계획을 살펴 보았지만 계산을 추가하지 않은 것으로 보입니다. 그러나 이것이 내 구체적인 사례가 아닌 일반성으로 파악되는 경우 알 수 있다고 생각했습니다.
제가 주된 이유는 ROWNUMBER() OVER(ORDER BY EmployeeID)
과 같은 창 작업을 수행 할 때 ORDER BY
에 대한 서수 참조를 사용할 수 없다는 것입니다. 따라서 내 열 중 하나가 복잡하면 테이블 변수에 덤핑하고 다시 정렬하는 방법에 대해 논쟁하기도합니다.
예, 보이는 것처럼 그것은 추가를 할 것 같습니다 (예 : EmployeeE2 WHERE MgrID = Employee.EmployeeID) 그 필드에 별칭을 지정하면 테이블을 다시 스캔 할 필요가 없습니다. MS는 윈도우 구성 요소 위에 별칭 지원 기능을 추가해야합니다! –