MYSQL 将行旋转到列
MYSQL Pivoting rows to column
我创建了以下 table
CREATE TABLE `demo` (
`id` int(11) DEFAULT NULL,
`A1` varchar(56) DEFAULT NULL,
`B1` varchar(56) DEFAULT NULL,
`C1` varchar(56) DEFAULT NULL,
`D1` varchar(56) DEFAULT NULL,
`E1` varchar(56) DEFAULT NULL,
`user_id` varchar(56) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
我的插入查询
INSERT INTO `demo` VALUES
(1,'a','b','c','d','d','10');
(2,'a','c','d','a','c','11');
(3,'a','d','d','a','c','12');
然后我的table结构就在这里
My table data
为此我尝试了以下
select `10`,`20`,`30` from
(
(select A1,B1,C1,D1,E1 from demo where id =1) as `10`,
(select A1,B1,C1,D1,E1 from demo where id =2) as `20`,
(select A1,B1,C1,D1,E1 from demo where id =3) as `30`
)as s
我遇到以下错误
Error Code: 1064. You have an error in your SQL syntax; check the manual
that corresponds to your MySQL server version for the right syntax to use
near 's' at line 6
请让我知道我做错了什么......或任何其他更好的方法来获得这个输出
您似乎想要:
select max(case when id = 1 then val end) as `10`,
max(case when id = 2 then val end) as `20`,
max(case when id = 3 then val end) as `30`
from ((select id, a1 as val, 1 as which from demo) union all
(select id, b1, 2 as which from demo) union all
(select id, c1, 3 as which from demo) union all
(select id, d1, 4 as which from demo) union all
(select id, e1, 5 as which from demo)
) x
group by which;
我创建了以下 table
CREATE TABLE `demo` (
`id` int(11) DEFAULT NULL,
`A1` varchar(56) DEFAULT NULL,
`B1` varchar(56) DEFAULT NULL,
`C1` varchar(56) DEFAULT NULL,
`D1` varchar(56) DEFAULT NULL,
`E1` varchar(56) DEFAULT NULL,
`user_id` varchar(56) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
我的插入查询
INSERT INTO `demo` VALUES
(1,'a','b','c','d','d','10');
(2,'a','c','d','a','c','11');
(3,'a','d','d','a','c','12');
然后我的table结构就在这里 My table data
为此我尝试了以下
select `10`,`20`,`30` from
(
(select A1,B1,C1,D1,E1 from demo where id =1) as `10`,
(select A1,B1,C1,D1,E1 from demo where id =2) as `20`,
(select A1,B1,C1,D1,E1 from demo where id =3) as `30`
)as s
我遇到以下错误
Error Code: 1064. You have an error in your SQL syntax; check the manual
that corresponds to your MySQL server version for the right syntax to use
near 's' at line 6
请让我知道我做错了什么......或任何其他更好的方法来获得这个输出
您似乎想要:
select max(case when id = 1 then val end) as `10`,
max(case when id = 2 then val end) as `20`,
max(case when id = 3 then val end) as `30`
from ((select id, a1 as val, 1 as which from demo) union all
(select id, b1, 2 as which from demo) union all
(select id, c1, 3 as which from demo) union all
(select id, d1, 4 as which from demo) union all
(select id, e1, 5 as which from demo)
) x
group by which;