我有一张这样的表:
Name Value
---------------
toyota yellow
nissan blue
toyota red
nissan black
我想将表格转换为:
toyota nissan
----------------
yellow blue
red black
我该怎么做?
我尝试使用此命令:
SELECT * (CASE Name WHEN 'toyota' THEN Value END) toyota,
(CASE Name WHEN 'nissan' THEN Value END) nissan
FROM testTable
但是这导致了这样一个表:
toyota nissan
----------------------
yellow NULL
NULL blue
red NULL
NULL black
帮助?感谢
答案 0 :(得分:2)
让我问一个问题,希望它能说明为什么它没有按照你的预期行事。
你想要
toyota nissan
----------------
yellow blue
red black
但同样可以
toyota nissan
----------------
yellow black
red blue
数据库如何确定黄色和蓝色在同一行?原始表中没有任何内容将两行绑在一起。
数据库不知道将黄色与黄色相关联的黑色或蓝色,因此它不会将其与任何一个相关联。
答案 1 :(得分:2)
使用完整外连接
select toyota, nissan from
(select value toyota, ROW_NUMBER() over (order by value desc) r
from testtable
where name = 'toyota') t
full outer join
(select value nissan, ROW_NUMBER() over (order by value desc) r
from testtable
where name = 'nissan') n
on t.r =n.r
答案 2 :(得分:2)
也可以使用pivot
:
declare @table table (Name varchar(50), Value varchar(50))
insert into @table values ('toyota', 'yellow'), ('nissan', 'blue'),
('toyota', 'red'), ('nissan', 'black')
;with t as (
select *, rn = row_number() over (partition by Name order by Value)
from @table
)
select Toyota, Nissan
from t
pivot (max(Value) for Name in ([Toyota],[Nissan])) p