2016-05-14 2 views
1

У меня есть один столбец с строки считать от 0 до 3TSQL Транспонирование одностоечный В Роу

test1 
test2 
test3 

нужно преобразовать его в ряд с три колонн

test1 | test2 | test3 

Или

test1 
test2 

Идет к

test1 | test2 | NULL 

Я не могу использовать PIVOT

Я не могу использовать ПЕТЛИ

Это может быть сделано с одним запросом? Жесткий код допустим!

+0

Есть ли какой-либо идентификатор на вашем столе? Или что-то еще для группировки строк? – gofr1

ответ

1

Ваш вопрос довольно расплывчатым, но, может быть, вам нужно что-то вроде этого:

select 
    max(case when RN = 1 then value end), 
    max(case when RN = 2 then value end), 
    max(case when RN = 3 then value end) 
from 
(
    select value, row_number() over (order by value) as RN 
    from yourtable 
) x 

Это будет принимать до 3-х значений из столбца называется значение и порядок затем в алфавитном порядке в 3 колонки.

0
;WITH example AS (
SELECT * 
FROM (VALUES 
(1, 'test1'), 
(1, 'test2'), 
(1, 'test3'), 
(2, 'test1'), 
(2, 'test2') 
) as t(id, string) 
) 

SELECT top 1 with ties e1.string, 
         e2.string, 
         e3.string 
FROM example e1 
left join example e2 
    on e1.id = e2.id and e1.string != e2.string 
left join example e3 
    on e1.id = e3.id and e1.string != e3.string and e2.string != e3.string 
ORDER BY ROW_NUMBER() OVER (PARTITION BY e1.id ORDER By e1.string,e2.string,e3.string) 

Выход:

string string string 
test1 test2 test3 
test1 test2 NULL 

Но если есть значения с различной линзой в струне может быть другой порядок в рядах.

0
create table #t (mycolumn varchar(10)) 

insert into #t values ('test1'),('test2'),('test3'),(NULL) 
declare @r varchar(max) 

select @r = COALESCE(@r + ' | ', '') + COALESCE(mycolumn,'NULL') 
from #t 

select @r 

    input: 
    mycolumn 
    -------- 
    test1 
    test2 
    test3 
    NULL 

    output: 
    test1 | test2 | test3 | NULL 
Смежные вопросы