2012-04-06 3 views
1

ich eine Abfrage erstellen, um die Daten pro Quartal zu erhalten.Möchten hinzufügen, wenn Bedingungen in Abfrage

Ich habe 4 Felder in user_target Tabelle quarter1, quarter2, quarter3 und quarter4 In jedem Quartal gibt es 3 Monate,

quater1 - Jan Feb March 
quater2 - Apr May June 
quater3 - July Aug Sept 
quater4 - Oct Nov Dec 

Nun, wenn ich $ P passieren {Monat} als Jan, Feb oder März dann sollte ich die Daten für viertel1 bekommen. Ähnlich, wenn ich $ P {Monat} als April, Mai oder Juni übergebe, dann sollte ich die Daten für viertel2 etc. bekommen. Ich möchte nicht 4 verschiedene Abfragen für verschiedene Monate schreiben. Kann es in einer einzelnen Abfrage selbst möglich sein?

für quater1 meine Frage ist unten:

select sum(t.quarter1) as quarter , 
      s.name as sname, f.name as fname, m.name as pname 
from user_target t, res_salesteam s, 
    account_fiscalyear f,res_users u, res_users ru, account_month m 
where t.salesteam_id = s.id and 
     t.fiscal_year = f.id and 
     f.id = $P{fiscalyear} and 
     p.fiscalyear_id = f.id and 
     m.id = $P{month} and 
     u.parent_id = ru.id and 
     ru.id = $P{name} and (u.tri_salesteam = s.id or ru.tri_salesteam = u.id) 
group by s.name, f.name, m.name order by s.name 
+0

werden Sie Volldatum oder nur Monat übergeben? –

+0

@KingFisher Ich bin gerade ID des Monats übergeben –

+0

wird es einfach sein, wenn Sie das ganze Datum anstelle von Monat übergeben können. –

Antwort

3

Sie können CASE ... END logisches Konstrukt

verwenden
SELECT sum(CASE 
    WHEN $P{month} IN ('Jan','Feb','March') THEN t.quarter1 
    WHEN $P{month} IN ('Apr','May','June') THEN t.quarter2 
    WHEN $P{month} IN ('July','Aug','Sept') THEN t.quarter3 
    WHEN $P{month} IN ('Oct','Nov','Dec') THEN t.quarter4 
    ELSE 0 END) AS quarter, 
    s.name as sname, f.name as fname, m.name as pname 
    FROM ... 
1

Verwendung MYSQL Funktion QUARTER() Quartal bestanden Datum zu erhalten und if /else

unter Versuchen Sie es mit sum nach zurück Quartal erhalten:

select sum(if(QUARTER(start_date)=1,t.quarter1,0)) as quarter1, 
SUM(if(QUARTER(start_date)=2,t.quarter2,0)) as quarter2, 
SUM((QUARTER(start_date)=3,t.quarter3,0)) as quarter3, 
SUM(IF(QUARTER(start_date)=4,quarter4,0)) as quarter4,s.name as sname, f.name as fname, m.name as pname 
    from user_target t, res_salesteam s, account_fiscalyear f,res_users u, res_users ru, account_month m 
    where t.salesteam_id = s.id and t.fiscal_year = f.id and f.id = $P{fiscalyear} and p.fiscalyear_id = f.id and m.id = $P{month} 
    and u.parent_id = ru.id and ru.id = $P{name} and (u.tri_salesteam = s.id or ru.tri_salesteam = u.id) 
    group by s.name, f.name, m.name order by s.name 
+0

Können wir stattdessen sum (if (Quarter (m.name) in ('Jan', 'Feb', 'Mar'), t.Quartal1,0)) als viertel1 hier verwenden sum (if (QUARTER (start_date) = 1, t.Quartal1,0)) als viertel1 –

+0

Die Eingabe der Viertelfunktion ist kein Datum –

Verwandte Themen