1

四半期ごとのデータを取得するクエリを 1 つ作成しています。

テーブルには4 つのフィールドがあり、 各四半期には 3 か月あります。user_targetquarter1quarter2quarter3quarter4

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

$P{month} を Jan、Feb、または March として渡すと、四半期 1 のデータを取得する必要があります。同様に、$P{month} を Apr、May、または June として渡すと、四半期 2 などのデータを取得する必要があります。月ごとに 4 つの異なるクエリを記述したくありません。単一のクエリ自体で可能ですか?

quater1 の MY クエリは次のとおりです。

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
4

2 に答える 2

3

CASE ... END論理構造を使用できます

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 ...
于 2012-04-06T10:58:59.483 に答える
1

MYSQL関数QUARTER()を使用して、渡された日付の四半期を取得sum し、返された四半期に従って取得しますif /else

以下を試してください:

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
于 2012-04-06T06:57:18.823 に答える