SQL转置行到列
问题描述:
我有一个SQL查询问题。我目前的表如下所示:SQL转置行到列
+--------+------+-----+-----+------+
| hostid | itemname | itemvalue |
+--------+------+-----+-----+------+
| A | 1 | 10 |
+--------+------+-----+-----+------+
| B | 2 | 3 |
+--------+------+-----+-----+------+
我该如何编写一个查询,以便我可以得到像这样的输出?
+--------+--
| A | B |
+--------+--
| 1 | 2 |
+--------+--
| 10 | 3 |
+--------+--
答
一般来说,你要寻找的对象是被称为“支点”。然而,这需要一个小的“技巧” - 使用cross join
- 允许将2列移动到2行。然后使用max()
和group by
来产生枢轴。
的MySQL 5.6架构设置:
CREATE TABLE Table1
(`hostid` varchar(1), `itemname` int, `itemvalue` int)
;
INSERT INTO Table1
(`hostid`, `itemname`, `itemvalue`)
VALUES
('A', 1, 10),
('B', 2, 3)
;
查询1:
select a, b
from (
select
max(case
when n = 1 and hostid = 'A' then itemname
when n = 2 and hostid = 'A' then Itemvalue
end) A
, max(case
when n = 1 and hostid = 'B' then itemname
when n = 2 and hostid = 'B' then Itemvalue
end) b
, n
from table1
cross join (select 1 n union all select 2) n
group by n
) d
;
| a | b |
|----|---|
| 1 | 2 |
| 10 | 3 |
您的问题现在解决了吗?你仍然有关于这个答案的问题吗?要接受答案“[**点击Tick **](https://ibb.co/ikqyO6)”以获取更多信息,请参阅[help/accepting](https://stackoverflow.com/help/someone-answers) –