将多列转置为一行 mysql
Transpose multiple columns into one row mysql
create table tab_1(
t1 decimal (10),
t2 decimal (10),
t3 decimal (10)
);
insert into tab_1(t1, t2, t3)
values(1,-2,-5);
insert into tab_1(t1, t2, t3)
values(-3,4,6);
insert into tab_1(t1, t2, t3)
values(5,1,2);
select @sum1:=sum(t1) FROM tab_1 WHERE t1 > 0
select @sum2:=sum(t2) FROM tab_1 WHERE t2 > 0
select @sum3:=sum(t3) FROM tab_1 WHERE t3 > 0
select @sum1, @sum2, @sum3;
结果:
@sum1 @sum2 @sum3
------------------
6 5 8
我有上面的查询,我想要一个将列转置为一列和 3 行的查询,如下所示:
Sum
--
6
5
8
我用MySQLWorkbench6.3.7.
你可以通过UNION ALL
实现
SELECT SUM(IF(t1 > 0 , t1, 0)) AS sum FROM tab_1
UNION ALL
SELECT SUM(IF(t2 > 0 , t2, 0)) AS sum FROM tab_1
UNION ALL
SELECT SUM(IF(t3 > 0 , t3, 0)) AS sum FROM tab_1
UNION vs UNION ALL
编辑:
为了将结果存储在变量中: confused.why 你需要这个吗?
SET @sum1 := 0;
SET @sum2 := 0;
SET @sum3 := 0;
SELECT @sum1 := SUM(IF(t1 > 0 , t1, 0)) AS sum FROM tab_1
UNION ALL
SELECT @sum2:= SUM(IF(t2 > 0 , t2, 0)) AS sum FROM tab_1
UNION ALL
SELECT @sum3 := SUM(IF(t3 > 0 , t3, 0)) AS sum FROM tab_1;
SELECT @sum1,@sum2,@sum3;
你几乎完成了变量赋值。只需将 union all
放在它们之间:
select 't1', sum(t1) FROM tab_1 WHERE t1 > 0
union all
select 't2', sum(t2) FROM tab_1 WHERE t2 > 0
union all
select 't3', sum(t3) FROM tab_1 WHERE t3 > 0;
(我删除了变量赋值,因为这似乎没有必要。)
我会包含一个标识符,这样我就知道哪个值对应于哪一列。
create table tab_1(
t1 decimal (10),
t2 decimal (10),
t3 decimal (10)
);
insert into tab_1(t1, t2, t3)
values(1,-2,-5);
insert into tab_1(t1, t2, t3)
values(-3,4,6);
insert into tab_1(t1, t2, t3)
values(5,1,2);
select @sum1:=sum(t1) FROM tab_1 WHERE t1 > 0
select @sum2:=sum(t2) FROM tab_1 WHERE t2 > 0
select @sum3:=sum(t3) FROM tab_1 WHERE t3 > 0
select @sum1, @sum2, @sum3;
结果:
@sum1 @sum2 @sum3
------------------
6 5 8
我有上面的查询,我想要一个将列转置为一列和 3 行的查询,如下所示:
Sum
--
6
5
8
我用MySQLWorkbench6.3.7.
你可以通过UNION ALL
SELECT SUM(IF(t1 > 0 , t1, 0)) AS sum FROM tab_1
UNION ALL
SELECT SUM(IF(t2 > 0 , t2, 0)) AS sum FROM tab_1
UNION ALL
SELECT SUM(IF(t3 > 0 , t3, 0)) AS sum FROM tab_1
UNION vs UNION ALL
编辑:
为了将结果存储在变量中: confused.why 你需要这个吗?
SET @sum1 := 0;
SET @sum2 := 0;
SET @sum3 := 0;
SELECT @sum1 := SUM(IF(t1 > 0 , t1, 0)) AS sum FROM tab_1
UNION ALL
SELECT @sum2:= SUM(IF(t2 > 0 , t2, 0)) AS sum FROM tab_1
UNION ALL
SELECT @sum3 := SUM(IF(t3 > 0 , t3, 0)) AS sum FROM tab_1;
SELECT @sum1,@sum2,@sum3;
你几乎完成了变量赋值。只需将 union all
放在它们之间:
select 't1', sum(t1) FROM tab_1 WHERE t1 > 0
union all
select 't2', sum(t2) FROM tab_1 WHERE t2 > 0
union all
select 't3', sum(t3) FROM tab_1 WHERE t3 > 0;
(我删除了变量赋值,因为这似乎没有必要。)
我会包含一个标识符,这样我就知道哪个值对应于哪一列。