SELECT Top (OuterQuery.Amount) * ОТ - PullRequest
       2

SELECT Top (OuterQuery.Amount) * ОТ

0 голосов
/ 23 июня 2011

У меня проблема со следующей конструкцией:

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

Есть ли решение этой проблемы?

Ответы [ 2 ]

3 голосов
/ 23 июня 2011

Невозможно параметризовать 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)

. Или вам придется сделать производный запрос UDF с@ topparameter

Примечание: вам все равно нужен ORDER BY

Возможно, есть лучшие способы сделать то, что вы действительно хотите: это ответ на то, что вы на самом деле спросили, что, вероятно, не то же самоевещь ...

0 голосов
/ 23 июня 2011

EDIT:

Я думаю, я понимаю, попробуйте это:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...