2017-10-29 14 views
0

SQL問合せの質問があります。私の現在のテーブルは次のようになります:SQLの転記行から列へ

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

このような出力を得るにはどうすればよいでしょうか? 「ピボット」として知られているもの、あなたが求めている一般的に

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

答えて

0

。しかしこれは、2つの列を2行に移動させるために、小さな「トリック」(cross joinを使用)を必要としました。その後、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

あなたの質問は今解決されましたか?あなたはまだこの答えについて質問がありますか? [help/accepting](https://stackoverflow.com/help/someone-answers)の詳細については、[** Click The Tick **](https://ibb.co/ikqyO6) –