2017-10-29 57 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) –