2016-08-17 5 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; 

Ergebnisse:Transponieren mehrere Spalten in einer Zeile mysql

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

Ich habe die Abfrage oben und ich möchte eine Abfrage, die Spalten in einer Spalte und 3 Reihen transponieren, wie unten:

Sum 
-- 
6 
5 
8 

Ich benutze MySQL Workbench 6.3.7.

+0

Sie suchen, was in SQL Server ist die "UNPIVOT" -Funktion. Unglücklicherweise hat MySQL diese Fähigkeit von Anfang an, und mir wurde gesagt, dass es sehr hässlich wird, sehr schnell. Für das einfache Beispiel, das du gabst, könntest du einfach die Werte zusammennehmen. –

Antwort

0

Sie können dies erreichen durch 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

EDIT:

Um die Ergebnisse in Variablen zu speichern: confused.why tun Sie dies benötigen?

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

Danke, es funktioniert perfekt. Aber wie lager ich die Ergebnisse in einer Variablen weiter? – BOB

+0

Bitte überprüfen Sie die aktualisierte Antwort – 1000111

0

Sie sind fast da mit Ihren Variablenzuweisungen. Setzen Sie einfach union all zwischen ihnen:

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; 

(Und ich die variable Zuordnung entfernt, denn das ist nicht notwendig erscheint.)

Ich würde eine Kennung enthalten, damit ich weiß, welcher Wert zu welcher Spalte entspricht.

Verwandte Themen