Sql server 2008 ms sql分组结果查询

Sql server 2008 ms sql分组结果查询,sql-server-2008,Sql Server 2008,我基本上有一个我创建的交易表,记录发票的进出。 我有一面卖旗和买旗 我想要一个简单的sql,它按月计算销售和购买。 问题是,如果我从组中删除事务类型(mybooks\u trans\u class\u id\u fk),它将不起作用,但如果我将其保留在结果中,这并不是我想要的 SQL: SELECT DATEPART(Year, mybooks_trans_transaction_datetime) as 'sales_year', DATEPAR

我基本上有一个我创建的交易表,记录发票的进出。 我有一面卖旗和买旗

我想要一个简单的sql,它按月计算销售和购买。 问题是,如果我从组中删除事务类型(mybooks\u trans\u class\u id\u 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
结果为:

       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能力充其量是中等的

这应该有效:(尽量不要改变太多)