2017-10-29 5 views
0

Ich habe eine SQL-Abfrage Frage. Meine aktuelle Tabelle sieht so aus:SQL Transpose Zeile zu Spalte

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

Wie würde ich eine Abfrage schreiben, damit ich eine Ausgabe wie diese bekommen kann?

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

Antwort

0

Im Allgemeinen, was Sie suchen, als „Schwenk“ bekannt ist. Dies erforderte jedoch einen kleinen "Trick" - mit einer cross join - Bewegung von 2 Spalten in 2 Zeilen zu ermöglichen. Dann werden max() und group by verwendet, um den Drehpunkt zu erzeugen.

SQL Fiddle

MySQL 5.6 Schema Einrichtung:

CREATE TABLE Table1 
    (`hostid` varchar(1), `itemname` int, `itemvalue` int) 
; 

INSERT INTO Table1 
    (`hostid`, `itemname`, `itemvalue`) 
VALUES 
    ('A', 1, 10), 
    ('B', 2, 3) 
; 

Abfrage 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

Ist Ihre Frage jetzt gelöst? Hast du noch Fragen zu dieser Antwort? Um eine Antwort zu akzeptieren "[** Klicken Sie auf das Häkchen **] (https://ibb.co/ikqyO6)" Weitere Informationen finden Sie unter [help/accepting] (https://stackoverflow.com/help/someone-answers) –