Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL与TOP交叉应用_Sql_Sql Server 2008_Sql Server 2012 - Fatal编程技术网

SQL与TOP交叉应用

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,

我使用的是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, 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