2015-09-03 5 views
0

У меня очень простой запрос, который выбирает верхние 3 кода из таблицы, и я хотел бы либо хранить их в таблице temp как отдельные значения столбцов, либо извлекать их в отдельные объявленные поля.SQL Select Top 3 в отдельные столбцы

Top 3 запроса:

select top 3 code 
from table1 t1 (NOLOCK) 
join table2 t2 (NOLOCK) on t1.codeid = t2.codeid 
where t2.recordid = '123456789' 
and t1.codetype = '987654' 

Результаты:

code 
    1111 
    2222 
    3333

Preferred выход:

code1  code 2  code3 
    1111  2222  3333

я также мог бы пойти на что-то другое, как:

Declare @code1 as varchar(4) 
Declare @code2 as varchar(4) 
Declare @code3 as varchar(4) 
DECLARE RULE_CURSOR CURSOR STATIC FOR 
{select statement here} 

OPEN RULE_CURSOR 
    FETCH NEXT FROM RULE_CURSOR into @code1, @code2, @code3 

Объявить и получить в самом деле мой предпочтительный метод, если кто-то может помочь мне.

Спасибо!

ответ

0

Я думаю, что я понял это из отдельного поста я осведомился о ранее:

DECLARE RULE_CURSOR CURSOR STATIC FOR 
     WITH cte 
     AS (SELECT top 3 code, ROW_NUMBER() over(order by code) rn 
      from Table1 T1 (NOLOCK) 
      join table2 t2 (NOLOCK) on t1.codeid = t2.codeid 
      where t2.recordid = '123456789' 
      and t1.codetype = '987654') 
SELECT [1] AS Code1 , 
     [2] AS Code2 , 
     [3] AS Code3 
FROM cte PIVOT(MAX(code) FOR rn IN ([1], [2], [3])) a 
     Open RULE_CURSOR 
    FETCH NEXT FROM RULE_CURSOR into @code1, @code2, @code3 
Смежные вопросы