TSQL将单列转置为行

时间:2016-05-14 09:12:26

标签: sql-server tsql

我有一列,行数从0到3

test1
test2
test3

我需要使用三个

将其转换为行
test1 | test2 | test3

或者

test1
test2

转到

test1 | test2 | NULL

不能使用PIVOT

不能使用LOOPS

可以通过单一查询完成吗? 硬编码是可以接受的!

3 个答案:

答案 0 :(得分: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

这将从名为value和order的列中获取最多3个值,然后按字母顺序排列为3列。

答案 1 :(得分: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

但如果字符串中有各种镜头的值,则行中可能会有其他顺序。

答案 2 :(得分: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