2017-01-25 5 views
0

Ich habe die folgende Tabelle. Ich möchte 2 neue Spalten mit einer Select-Abfrage hinzufügen, die die Gesamtsumme basierend auf dem Flag-Typ anzeigt.Erstellen Sie 2 Spalten basierend auf Wert in der vorhandenen Spalte

Tabelle:

tt  | company  | count | flag 
    -------------------------------------------- 
    123  | adeco  | 5  | 1 
    123  | mic   | 4  | 2 
    333  | manpower | 88  | 2 
    444  | linar  | 2  | 2 
    555  | dlank  | 3  | 1 

Wunsch:

tt  | company  | total | flag | total_flag1 | total_flag2 
    ------------------------------------------------------------------- 
    123  | adeco  | 5  | 1  | 5   | 0 
    123  | mic   | 4  | 2  | 0   | 4 
    333  | manpower | 88  | 2  | 0   | 88 
    444  | linar  | 2  | 2  | 0   | 2 
    555  | dlank  | 3  | 1  | 3   | 0 

Antwort

2

Ihre gewünschten Ergebnis, sollten Sie Verwenden Sie case when oder if Syntax zu diesem:

select 
    yourtable.*, 
    case when flag = 1 then `count` else 0 end as total_flag1, 
    case when flag = 2 then `count` else 0 end as total_flag2 
from yourtable 

Oder

select 
    yourtable.*, 
    if(flag = 1, `count`, 0) as total_flag1, 
    if(flag = 2, `count`, 0) as total_flag2 
from yourtable 
0

Ich glaube, Sie können tun, was Sie korrelierte Unterabfragen oder join mit wollen:

select t.*, tsum.total_flag1, tsum.total_flag2 
from t join 
    (select t.tt, 
      sum(case when flag = 1 then total else 0 end) as total_flag1, 
      sum(case when flag = 2 then total else 0 end) as total_flag2 
     from t 
     group by t.tt 
    ) tsum 
    on t.tt = tsum.tt; 
Verwandte Themen