0
SQL Server 2008/2012입니다. 나는 당신이 TOP 사용할 때마다 항상 TOP 무엇을 반환하기 위해 ORDER BY를 사용해야 읽고 나는이SQL 교차 적용 TOP
-- Insert 5 future years
SELECT TOP(5) V.CompanyId, V.StartDate, V.EndDate
FROM #MonthTally T
CROSS APPLY
(
SELECT
F.CompanyId,
DATEADD(YY, T.N,MAX(F.StartDate)) AS StartDate,
DATEADD(YY, T.N,MAX(F.EndDate)) AS EndDate
FROM FiscalPeriods F
GROUP BY CompanyId
) V
처럼 tallytable을 사용하고 #MonthTally
;WITH
Pass0 AS (SELECT 1 AS C UNION all SELECT 1), --2 rows
Pass1 AS (SELECT 1 AS C FROM Pass0 AS A, Pass0 AS B),--4 rows
Pass2 AS (SELECT 1 AS C FROM Pass1 AS A, Pass1 AS B),--16 rows
Pass3 AS (SELECT 1 AS C FROM Pass2 AS A, Pass2 AS B),--256 rows
Tally AS (SELECT ROW_NUMBER() OVER(ORDER BY C) AS N FROM Pass3)
SELECT TOP 256 ROW_NUMBER() OVER (ORDER BY (SELECT 0)) AS N
INTO #MonthTally
FROM Tally
ORDER BY N
에 tallytable 있습니다. 따라서 #MonthTally
에 데이터를 삽입하는 방법에 관계없이 ORDER BY를 사용하지 않는 한 SELECT TOP(5) * FROM #MonthTally
을 항상 1에서 5까지 반환 할 수는 없습니다. 하지만 CROSS APPLY에 주문 방법을 어떻게 얻습니까?
더 나쁘지 않다면 교차 적용 외부에서 집계 할 수 있습니다. 어쨌든 GROUP BY에 대한 각 행의 성능이 좋지 않습니다. 그러나 나는 상관없이 알고 싶다.
TOP
감사합니다 사용하는 CTE를에 쿼리 또는 하위 쿼리를 넣을 수 있지만. 나는 1과 5 사이를 사용했다. – CodeMonkey