我在oracle数据库中有一个表:
id | name | value
-----------------------
1 | dog name | ham
1 | cat name | miau
1 | childs | 1
2 | dog name | wham
2 | cat name | meow
2 | childs | 3
我希望看到这样的观点:
id | dog name | cat name | childs
------------------------------------
1 | ham | miau | 1
2 | wham | meow | 3
你可以帮我用sql来做吗?
答案 0 :(得分:3)
使用此查询:我无法连接到SQLfiddler
。所以,请检查代码并告诉我它返回的内容。
select *
from
(
SELECT id, name, value FROM table A)
pivot
(
max(value) for name in ('dog name', 'cat name', 'childs')
)
order by id
您可以从此处了解有关PIVOT for oracle的更多信息:link
答案 1 :(得分:3)
CREATE TABLE #temp
(
id INT,
name VARCHAR(20),
value VARCHAR(10)
)
INSERT INTO #temp VALUES( 1,'dog name','ham')
INSERT INTO #temp VALUES( 1,'cat name' ,'miau')
INSERT INTO #temp VALUES( 1,'childs',' 1')
INSERT INTO #temp VALUES( 2,'dog name','wham')
INSERT INTO #temp VALUES( 2 ,'cat name','meow')
INSERT INTO #temp VALUES( 2,'childs','3')
SELECT * FROM #temp
PIVOT (MAX(value) FOR name IN ([dog name],[cat name],[childs])) AS PVT
DROP TABLE #temp
解决方案
SELECT * FROM #temp
PIVOT (MAX(value) FOR name IN ([dog name],[cat name],[childs])) AS PVT
替换
“#temp”,表名为