2016-09-10 9 views
0

私は、コストセンタ、ベンダ、ツール、コスト、および四半期の列を持つテーブルを持っています。私はと2四半期(たとえば15/16 Q3および15/16 Q2)とのコスト差の結果を取得したい:私は最初に以下のようにCOSTCENTERとベンダーのために結果を取得するクエリを作成しているテーブルに複数のクエリを結合して1つの選択結果を得る

enter image description here

が、それが適切に両者を接合されていない。 enter image description here

select a.Costcenter,c.Vendor,(SumA-SumB) as costcenter_diff, (SumC-SumD) as vendor_diff from 
    (select Costcenter ,sum(CostTotal) as SumA 
        from Rawdata 
        where Quarter='15/16 Q3' 
        group by Costcenter)as a, 
        (select Costcenter,sum(CostTotal) as SumB 
        from Rawdata 
        where Quarter='15/16 Q2' 
        group by Costcenter) as b 
    Join 
    (select Costcenter,Vendor,sum(CostTotal) as SumC 
        from Rawdata 
        where Quarter='15/16 Q3' 
        group by Costcenter,Vendor)as c, 
        (select Costcenter,Vendor,sum(CostTotal) as SumD 
        from Rawdata 
        where Quarter='15/16 Q2' 
        group by Costcenter,Vendor) as d where a.Costcenter = b.Costcenter and 
        c.Costcenter= d.Costcenter and c.Vendor= d.Vendor; 
+0

ご質問はもう少し明確にしてください。私は2四半期の間にコスト差の結果を得たいと思っています(例えば、Q3は15/16、Q2は15/16)。 Q3? Q2? –

+0

また、あなたの質問を画像ではなくテキストとして質問に入れてください。 –

+0

Q3は第3四半期、第2四半期は2015-16年の第2四半期です。私は、これらの四半期間のコスト差をCostcenterとVendorに賢明に求めています。私はSumAとして'15/16Q3 '、SumBを'15/16Q2'として2つのコストを選択し、コストセンターのために最初のSELECTで(SumA-SumB)を減算し、同様にベンダーに対しても同様のコストを選択します。しかし、私は上のスナップショットで述べたような形で出力を得ることができません。 – user6559913

答えて

0

まず、条件集合を使用します。その後

select CostCenter, 
     sum(case when quarter = '15/16 Q2' then costtotal else 0 end) as sumq2, 
     sum(case when quarter = '15/16 Q3' then costtotal else 0 end) as sumq3 
from rawdata rd 
where quarter in ('15/16 Q3', '15/16 Q2'); 

、ベンダーのためにこれを行うと、それらを一緒に参加する:例えば、合理的な何かを

  • 名前の列:

    select ccv.costcenter, ccv.vendor, 
         (cc.sumq3 - cc.sumq2) as cc_diff, 
         (ccv.sumq3 - ccv.sumq2) as ccv_diff 
    from (select CostCenter, 
          sum(case when quarter = '15/16 Q2' then costtotal else 0 end) as sumq2, 
          sum(case when quarter = '15/16 Q3' then costtotal else 0 end) as sumq3 
         from rawdata rd 
         where quarter in ('15/16 Q3', '15/16 Q2') 
         group by CostCenter 
        ) cc join 
        (select CostCenter, vendor, 
          sum(case when quarter = '15/16 Q2' then costtotal else 0 end) as sumq2, 
          sum(case when quarter = '15/16 Q3' then costtotal else 0 end) as sumq3 
         from rawdata rd 
         where quarter in ('15/16 Q3', '15/16 Q2') 
         group by CostCenter, vendor 
        ) ccv 
        on cc.costcenter = ccv.costcenter; 
    

    注意を。 abは、クエリを理解しやすくしていません。

  • JOIN条件は、WHEREではなく、ON句にする必要があります。
  • FROM句にカンマを使用しないでください。 常には、明示的なJOIN構文を使用します。
+0

解決策と提案に感謝します。それは完璧に働いた。可能であれば、同じクエリで> 1000の値に対してcc_diffをフィルタリングする方法を私にも教えてください。 – user6559913

+0

@ user6559913 。 。 'where'句を使うことができますが、カラムエイリアスではなく式を使う必要があります。 –

+0

"having"句を使って取得できます。私はcostcenter_change、vendor_change、およびTool_changeで30%以上の変更を選択するためにそれを使用しています: – user6559913

関連する問題