2016-08-17 56 views
2
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; 

結果:移調多個列到一行的MySQL

@sum1 @sum2 @sum3 
------------------ 
    6  5  8 

我有上述查詢和我想要的轉置的列在一列和3行,如下面的查詢:

Sum 
-- 
6 
5 
8 

我使用MySQL Workbench 6.3.7。

+0

您正在尋找SQL Server中的「UNPIVOT」功能。不幸的是,MySQL確實具備這種功能,並且我被告知它變得非常難看,非常快。對於你給出的簡單例子,你可以將'UNION'放在一起。 –

回答

0

您可以通過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; 
+0

謝謝,它完美的作品。但我如何將結果存儲在變量中以便進一步使用? – BOB

+0

請檢查更新後的答案 – 1000111

0

您幾乎在那裏與您的變量分配。只要把它們之間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; 

(我刪除的變量賦值,因爲似乎沒有必要。)

我將包括一個標識符,我知道哪個值對應於列。