SELECT Top(OuterQuery.Amount)* FROM

时间:2011-06-23 12:44:23

标签: sql sql-server sql-server-2008

我在处理以下构造时遇到问题:

SELECT *
FROM X
INNER JOIN
(
    SELECT TOP (X.IntegerAmount) *
    FROM Y
) AS Z ON X.ID = Z.X_ID

这个问题有解决方案吗?

2 个答案:

答案 0 :(得分:3)

您无法使用其他表中的值

来参数化TOP

您可以使用排名功能

SELECT *
FROM X
INNER JOIN
(
    SELECT ROW_NUMBER() OVER (ORDER BY SomeVal) as rn, *
    FROM Y
) AS Z ON X.ID = Z.X_ID
WHERE
   Z.rn <= X.IntegerAmount)

或者您必须使用@topparameter

将派生查询设为UDF

注意:无论如何你需要一个ORDER BY

可能有更好的方法来做你真正想要的事情:这是你实际问的答案,这可能不是同一件事......

答案 1 :(得分:0)

编辑:

我想我明白了,试试这个:

DECLARE @i as INT = 10
SET @SQL + 'SELECT * FROM X INNER JOIN 
(     
    SELECT TOP 
    ' +CAST(@i AS NVARCHAR(10))  + ' *     
    FROM Y 
) AS Z     
ON     X.ID = Z.X_ID'
EXEC sp_executesql  @SQL