显示支出历史记录的SQL查询

显示支出历史记录的SQL查询,sql,sql-server,transactions,sql-server-2008-r2,Sql,Sql Server,Transactions,Sql Server 2008 R2,我被要求创建一个查询,使债务人花费历史记录表 数据来源:MYOB Exonnet 存在父帐户,但该表将包含子帐户。然而,子帐户事务实际上并不是在子级别进行的,而是在父级别进行的。但我只想报告一些儿童账户 表如下: DR\u账户(债务人账户) 有一个“视图”,提供子帐户的交易记录。它不会出现在数据库中,但在输入查询时,它显示为 AnaylticsSalesInvoices DR_ACCS和analyticssaleinvoices之间的连接是DR_ACCS.ACCNO=analyticssalei

我被要求创建一个查询,使债务人花费历史记录表

数据来源:MYOB Exonnet 存在父帐户,但该表将包含子帐户。然而,子帐户事务实际上并不是在子级别进行的,而是在父级别进行的。但我只想报告一些儿童账户

表如下:
DR\u账户(债务人账户)

有一个“视图”,提供子帐户的交易记录。它不会出现在数据库中,但在输入查询时,它显示为

AnaylticsSalesInvoices

DR_ACCS
analyticssaleinvoices
之间的连接是
DR_ACCS.ACCNO=analyticssaleinvoices.accountNumberAnalysis

因此,现在我需要去“获取所有帐户的交易,这些帐户的字段
DR_ACCS.X\u TOPCUSTOMER
勾选了
'Y'
,并将它们分为'this month'、'last month'、'last months'、'2个月前'和'last 12个月'

我想要的是这样的结果:

> Customer Name | This Month | Last Month | 2 Months Ago | 12 Month |    
> Jones         |       $235 |       $756 |          $49 |    $2800 |   
> Smith         |        $14 |         $0 |         $459 |     $629 |  
> Lewis         |       $520 |        $35 |           $0 |    $9206 |
有人能帮忙吗?我试过各种方法,但都迷路了

DECLARE
    @this_start DATETIME,
    @this_end   DATETIME,
    @last_start DATETIME,
    @last_end   DATETIME,
    @l2_start   DATETIME,
    @l2_end     DATETIME,
    @year_start DATETIME,
    @year_end   DATETIME

SELECT
    @this_start = DATEADD(m,DATEDIFF(m,0,GETDATE()),0),
    @this_end   = DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE())+1,0)),
    @last_start = DATEADD(m,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE()),0)),
    @last_end   = DATEADD(s,-1,@this_start),
    @l2_start   = DATEADD(m,-2,DATEADD(mm, DATEDIFF(m,0,GETDATE()),0)),
    @l2_end     = DATEADD(s,-1,@last_start),
    @year_start = DATEADD(m,-12,@this_start),
    @year_end   = @this_end

-- just a check of the variable values:
SELECT              -- GETDATE() = 2014-09-15 10:50:15.000
    @this_start,    -- 2014-09-01 00:00:00.000
    @this_end,      -- 2014-09-30 23:59:59.000
    @last_start,    -- 2014-08-01 00:00:00.000
    @last_end,      -- 2014-08-31 23:59:59.000
    @l2_start,      -- 2014-07-01 00:00:00.000
    @l2_end,        -- 2014-07-31 23:59:59.000
    @year_start,    -- 2013-09-01 00:00:00.000
    @year_end       -- 2014-09-30 23:59:59.000

SELECT 
    dr_accs.NAME,
    [This Month]   = SUM(CASE WHEN b.date BETWEEN @this_start AND @this_end THEN b.total ELSE 0 END),
    [Last Month]   = SUM(CASE WHEN b.date BETWEEN @last_start AND @last_end THEN b.total ELSE 0 END),
    [2 Months Ago] = SUM(CASE WHEN b.date BETWEEN @l2_start AND @l2_end THEN b.total ELSE 0 END),
    [12 Month]     = SUM(b.total)

FROM dr_accs JOIN AnalyticsSalesInvoices b ON DR_ACCS.ACCNO = b.accountNumberAnalysis
WHERE dr_accs.x_topcustomer = 'Y'
AND b.date_field BETWEEN @year_start AND @year_end

请注意,您必须将“b.date”和“b.total”更改为实际的列名。

每个表上的列是什么?对不起,我已经深入研究了,我认为我们根本不需要
DR_TRANS
表。好的,
DR_ACCS.ACCNO(pk,int,not null)
DR_ACCS.NAME(varchar(40,null)
DR_ACCS.X_TOPCUSTOMER(char(1),null)
DR_ACCS.MONTHVAL(float,null)
是DR_ACCS中的字段。然后在另一个表中(我似乎在数据库中找不到它,因为它是一个“视图”):
analyticssaleinvoices.accountnamesanalysis(int,非null)
AnalyticsSalesInvoices.SalesValueTaxExclusive(浮动,空)
AnalyticsSalesInvoices.TransactionDate(日期)
因此,如果DR_ACCS.X_TOPCUSTOMER feild为“Y”,则将本月的SalesValueTaxExclusive相加,再加上上上一个月,再加上前一个月,再加上连续12个月的SalesValueTaxExclusive。到目前为止,我遇到的问题是,如果该值为空,它不会返回0.00美元,因此结果到处都是。