2017-10-13 13 views
-2

レポートとレポートの作成(MS SQL SERVER 2014)では、前月の最終日、先週の同じ日、先月の取引数と金額を比較し、このようなクエリが必要です。作業されていない。ケース選択FROM連合

Select 
    Acquirer = case when Date = @Day then a.Acquirer 
        when Date = @LastWeekDay then b.Acquirer 
        when Date = @LastMonthDay then c.Acquirer 
       end 
, RC =  case when Date = @Day then a.RC 
        when Date = @LastWeekDay then b.RC 
        when Date = @LastMonthDay then c.RC 
       end 
, Desc =  case when Date = @Day then a.Desc 
        when Date = @LastWeekDay then b.Desc 
        when Date = @LastMonthDay then c.Desc 
       end 
, Day_Tr_Count = case when Date = @Day then a.Count end 
, LWD_Tr_Count = case when Date = @LastWeekDay then b.Count end 
, LMD_Tr_Count = case when Date = @LastMonthDay then c.Count end 
, Day_Tr_Amount = case when Date = @Day then a.Amount end 
, LWD_Tr_Amount = case when Date = @LastWeekDay then b.Amount end 
, LMD_Tr_Amount = case when Date = @LastMonthDay then c.Amount end 

from 
    (select * from T1 
    union 
    select * from T2 
    union 
    select * from T3) x 
group by Acquirer,RC,Desc 

をすべての3つのテーブルはかなり同じ構造を持っている:

T1,T2,T3(acquirer,RC,Desc,Count,Amount,Date). 

報告書は次のようになります。

result_table(Acquirer,RC,Desc,Daily_Count,Last_Week_Day_Count,Last_Month_Count,Daily_Amount,Last_Week_Day_Amount,Last_Month_Day_Amount) 
+0

ステップ1:おそらく 'UNION ALL'が必要です。 – jarlh

+0

どのように*動作していない*? –

+0

一般的なGROUP BYルールでは、「GROUP BY句が指定されている場合、SELECTリストの各列参照は、グループ化列を特定するか、または集合関数の引数でなければなりません。 – jarlh

答えて

0

Hmmm。 group byの集約クエリがあります。おそらく:

Select v.Acquirer, v.RC, v.Desc, 
     Day_Tr_Count = sum(case when Date = @Day then a.Count end), 
     LWD_Tr_Count = sum(case when Date = @LastWeekDay then b.Count end), 
     LMD_Tr_Count = sum(case when Date = @LastMonthDay then c.Count end), 
     Day_Tr_Amount = sum(case when Date = @Day then a.Amount end 
     LWD_Tr_Amount = sum(case when Date = @LastWeekDay then b.Amount end), 
     LMD_Tr_Amount = sum(case when Date = @LastMonthDay then c.Amount end) 

from (select * from T1 
     union all 
     select * from T2 
     union all 
     select * from T3 
    ) x cross apply 
    (values (case when Date = @Day then a.Acquirer 
        when Date = @LastWeekDay then b.Acquirer 
        when Date = @LastMonthDay then c.Acquirer 
       end, 
       case when Date = @Day then a.RC 
        when Date = @LastWeekDay then b.RC 
        when Date = @LastMonthDay then c.RC 
       end, 
       case when Date = @Day then a.Desc 
        when Date = @LastWeekDay then b.Desc 
        when Date = @LastMonthDay then c.Desc 
       end 
      ) v (Acquirer, RC, Desc) 
group by v.Acquirer, v.RC, v.Desc; 

注:descは、列(または何か他)のための悪い名前です。これはSQLキーワードです(考えてくださいorder by)。

関連する問題