SQL与TOP交叉应用
我使用的是SQL Server 2008/2012。我每月都有一张结算表 我用的是这样的高台SQL与TOP交叉应用,sql,sql-server-2008,sql-server-2012,Sql,Sql Server 2008,Sql Server 2012,我使用的是SQL Server 2008/2012。我每月都有一张结算表 我用的是这样的高台 -- 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,
-- 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
我已经读到,无论何时使用TOP,都应该始终使用ORDER BY来确保TOP返回的是什么。因此,我不能指望从Monthtaly选择TOP5*FROM总是返回1到5,除非我使用ORDER BY,无论数据是如何插入Monthtaly的。但我如何通过交叉申请获得订单呢
这样就不会更糟了,我可以在十字架外聚集。不管怎么说,按每行分组可能会表现不佳。但无论如何我都想知道。在本例中,我只使用1到5之间的N 一般来说,您可以将查询放入使用TOP的CTE或子查询中
非常感谢。我使用了介于1和5之间的数字。
-- 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
WITH T AS
(
SELECT TOP(5) N
FROM #MonthTally
ORDER BY N
)
SELECT V.CompanyId, V.StartDate, V.EndDate
FROM 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
ORDER BY T.N