2017-10-29 43 views
0

我有一个SQL查询问题。我目前的表如下所示:SQL转置行到列

+--------+------+-----+-----+------+ 
| hostid | itemname | itemvalue | 
+--------+------+-----+-----+------+ 
| A |  1  |  10 | 
+--------+------+-----+-----+------+ 
| B |  2  |  3  | 
+--------+------+-----+-----+------+ 

我该如何编写一个查询,以便我可以得到像这样的输出?

+--------+-- 
| A | B | 
+--------+-- 
| 1 | 2 | 
+--------+-- 
| 10 | 3 | 
+--------+-- 

回答

0

一般来说,你要寻找的对象是被称为“支点”。然而,这需要一个小的“技巧” - 使用cross join - 允许将2列移动到2行。然后使用max()group by来产生枢轴。

SQL Fiddle

的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 
; 

Results

| a | b | 
|----|---| 
| 1 | 2 | 
| 10 | 3 | 
+0

您的问题现在解决了吗?你仍然有关于这个答案的问题吗?要接受答案“[**点击Tick **](https://ibb.co/ikqyO6)”以获取更多信息,请参阅[help/accepting](https://stackoverflow.com/help/someone-answers) –