我有一列,行数从0到3
test1
test2
test3
我需要使用三个列
将其转换为行test1 | test2 | test3
或者
test1
test2
转到
test1 | test2 | NULL
我不能使用PIVOT
我不能使用LOOPS
可以通过单一查询完成吗? 硬编码是可以接受的!
答案 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