1

私は基本的に、請求書の出入りを記録するトランザクション テーブルを作成しました。販売 (=1) と購入 (=2) のフラグがあります。

月ごとの売上と購入を計算する単純な SQL が必要です。問題は、グループからトランザクション タイプ (mybooks_trans_class_id_fk) を削除しても機能しないことですが、それを結果に残したままにしておくと、私が望むものではありません。

SQL:

       SELECT 
        DATEPART(Year, mybooks_trans_transaction_datetime) as 'sales_year',
        DATEPART(Month, mybooks_trans_transaction_datetime) as 'sales_month',
        case 
        when cast( mybooks_trans_class_id_fk as nvarchar(100))!='1' then cast(sum(mybooks_trans_gross_amount) as nvarchar(100))
        else '0' 
        end as total_sales,

        case 
        when cast( mybooks_trans_class_id_fk as nvarchar(100))!='2' then cast(sum(mybooks_trans_gross_amount) as nvarchar(100))  
        else '0' 
        end as total_purchases         
        from view_mybooks_transactions_all_details 
        GROUP BY DATEPART(Year, mybooks_trans_transaction_datetime), 
        DATEPART(MM, mybooks_trans_transaction_datetime),mybooks_trans_class_id_fk

結果は次のとおりです。

2012     11 0   15300.00

2012     12 0   2500.00

2013    1   0   1300.00

2013    1   600.00  0

2013    2   0   2750.00

2013    2   1500.00 0

しかし、たとえば月1を1行だけにしたいので、必要な結果は

2012    11  0   15300.00

2012    12  0   2500.00

2013    1   600.00  1300.00

2013    2   1500.00 2750.00

助言がありますか?私のSQL能力はせいぜい中程度です!

4

1 に答える 1

2

これはうまくいくはずです:(あまり変更しないようにしました)

SELECT 
  DATEPART(Year, mybooks_trans_transaction_datetime) as 'sales_year',
  DATEPART(Month, mybooks_trans_transaction_datetime) as 'sales_month',
  SUM(case 
      when mybooks_trans_class_id_fk != 1
      then mybooks_trans_gross_amount
      else 0
      end) as total_sales,
  SUM(case 
      when mybooks_trans_class_id_fk != 2
      then mybooks_trans_gross_amount
      else 0
      end) as total_purchases
FROM view_mybooks_transactions_all_details 
GROUP BY DATEPART(Year, mybooks_trans_transaction_datetime), 
         DATEPART(MM, mybooks_trans_transaction_datetime)
于 2013-02-08T16:25:09.427 に答える