涉及3个表的SQL年初至今报告

涉及3个表的SQL年初至今报告,sql,sql-server-2008,tsql,reporting,Sql,Sql Server 2008,Tsql,Reporting,我正在尝试创建一个“年初至今”报告,该报告列出了自年初以来所有客户的所有发票总额。我还想从预算表中加入相同的合计列,以便它们能够比较实际与预算。我能够将客户加入发票并正确获取其总数,但在加入预算表时无法获得正确的值 tbl_客户 -唯一标识符 -名称varchar100 -无活性钻头 -isDeleted位 待定发票 -客户端唯一标识符 -月整数 -整年 -能量积分 -需求整数 -DemandDollar小数18,2 -能量美元小数18,2 -无活性钻头 -IsDeleted位 tbl_预算 -

我正在尝试创建一个“年初至今”报告,该报告列出了自年初以来所有客户的所有发票总额。我还想从预算表中加入相同的合计列,以便它们能够比较实际与预算。我能够将客户加入发票并正确获取其总数,但在加入预算表时无法获得正确的值

tbl_客户 -唯一标识符 -名称varchar100 -无活性钻头 -isDeleted位

待定发票 -客户端唯一标识符 -月整数 -整年 -能量积分 -需求整数 -DemandDollar小数18,2 -能量美元小数18,2 -无活性钻头 -IsDeleted位

tbl_预算 -客户端唯一标识符 -月整数 -整年 -能量积分 -需求整数 -DemandDollar小数18,2 -能量美元小数18,2 -无活性钻头 -IsDeleted位

该程序目前用于从tbl_发票中获取每个客户的总计。我只是不知道如何将tbl_预算表总计添加为另外5列。预算表中的Mills列的计算方式相同

下面是我目前使用的2012年和9月9日的静态值的过程,它们最终将成为存储过程中的参数

Select cli.name
    , Sum(inv.DemandDollar) as DemandDollar
    , SUM(inv.EnergyDollar) as EnergyDollar
    , Sum(inv.Energy) as Energy
    , Sum(inv.Demand) as Demand
    , Mills = 
        (
        case when sum(inv.Energy) = 0
        then 0.00
        else
        Cast((((sum(inv.DemandDollar) + sum(inv.EnergyDollar))/sum(inv.Energy))* 1000) as decimal(18,2))
        end 
        )

from tbl_Clients cli
join tbl_Invoices inv
on inv.ClientID = cli.ID

where cli.IsActive = 1 and cli.IsDeleted = 0 
and inv.IsActive = 1 
and inv.IsDeleted = 0 and inv.Year = 2012 and inv.Month <= 9 
group by cli.name

你首先要问自己的是,没有发票的客户是否可以有预算,他们是否需要包括在内?此外,没有预算的客户可以有发票吗?每个有发票的客户都有预算吗?每个有预算的客户都有发票吗?这些问题的答案将影响您构建查询的方式

所以,也许这个,不管怎样,它都会收集所有的预算和发票:

SELECT cli.Name, SUM(UsedDollar) AS UsedDollar, SUM(BudgetDollar) AS BudgetDollar
(SELECT ClientID, EnergyDollar AS UsedDollar, 0.0 AS BudgetDollar
FROM tbl_Invoices
WHERE Year = 2012 AND Month <= 9
UNION ALL
SELECT ClientID, 0.0 AS UsedDollar, EnergyDollar AS BudgetDollar
FROM tbl_Budgets
WHERE Year = 2012 AND Month <= 9
) DT 
INNER JOIN tbl_Clients cli ON DT.ClientID = cli.ID
GROUP BY cli.Name

每个活跃客户每年通常有12张发票和12份预算。我想包括所有发票和所有预算,他们可能有截至本月。top proc返回错误的值。底部进程有一些语法问题,我正试图弄清楚。我慢慢地把它捡起来。感谢您的帮助一般来说,客户每年都有12行预算。然后每个月添加一个发票行。对不起,第一个查询完全错误,所以我将其删除。第二个有一个复制粘贴错误-第二个嵌套的select前面有一个不需要的括号。修好了,是的,我刚弄明白。我正忙着添加其他栏目。你的第二个问题做得很好。这看起来很简单。我想我总是想得太多了。谢谢你的帮助。