2015-01-20 2 views
0

Я хочу выбрать n-я строка и присвоить ее переменной. До сих пор у меня есть это:Выберите n-я строка и назначьте ее переменной

DECLARE @LEVEL INT; 
    DECLARE @COUNT INT = 14; 
    DECLARE @A INT = 1;  

    SET @LEVEL = (SELECT * FROM 
    (SELECT ROW_NUMBER() OVER (ORDER BY Q_Total) AS rownumber, Q_Response 
    FROM #Qtemp) AS name WHERE rownumber = @COUNT - @A); 

запроса, которую, кажется, работает, но я получаю эту ошибку:

Msg 116, уровень 16, состояние 1, строка 176 только одно выражение может быть задано в избранных когда подзапрос не вводится с EXISTS.

Является ли это возможным или есть другой способ сделать это? Спасибо!

+0

Перемещение столбцов-псевдонимов "в качестве имени (ROWNUMBER, Q_Response)"? – jarlh

+1

, когда вы говорите, присваиваете n-й строке переменной, вы имеете в виду присваивать * значение * от n-й строки до переменной? В этом случае измените 'SELECT * FROM ...' на 'SELECT FROM ...' –

ответ

2

У вас есть ошибка в коде. При назначении результата выбора значение должно содержать один столбец в наборе результатов. Изменение в

DECLARE @LEVEL INT; 
    DECLARE @COUNT INT = 14; 
    DECLARE @A INT = 1;  

    SET @LEVEL = (SELECT Q_Response FROM 
    (SELECT ROW_NUMBER() OVER (ORDER BY Q_Total) AS rownumber, Q_Response 
    FROM #Qtemp) AS name WHERE rownumber = @COUNT - @A); 

Если вы используете SQL 2012, то это может быть упрощенным

DECLARE @LEVEL INT; 
DECLARE @COUNT INT = 14; 
DECLARE @A INT = 1;  

SELECT @LEVEL = Q_Response FROM #Qtemp 
ORDER BY Q_Total 
OFFSET @COUNT - @A ROWS FETCH FIRST 1 ROW ONLY 
Смежные вопросы