2013-02-08 76 views
1

我基本上有一個事務表,我創建了一個記錄發票的輸入和輸出。 我有一個銷售(= 1)和購買(= 2)的標誌。ms sql分組結果查詢

我想要一個簡單的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例如是在一排只有這樣的成績我想是

2012 11 0 15300.00 

2012 12 0 2500.00 

2013 1 600.00 1300.00 

2013 2 1500.00 2750.00 

有什麼建議嗎?我的SQL能力最好是適中的!

回答

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)