Sql server 2008 r2 当一个表可能没有行时,如何对不同表的总计进行求和

Sql server 2008 r2 当一个表可能没有行时,如何对不同表的总计进行求和,sql-server-2008-r2,Sql Server 2008 R2,我试图将表1中两列的结果相互相减,如果该表中存在数据,则将表2中的总数相加。表2中并不总是有数据,所以如果没有数据,我需要使用0。这是我到目前为止得到的结果,当表2中有数据时,它返回了错误的数量 SELECT CONVERT(CHAR(10),table1.PostingDate, 120) AS business_date, table1.Location AS store_number, (CASE WHEN COUNT(table2.Document) >

我试图将表1中两列的结果相互相减,如果该表中存在数据,则将表2中的总数相加。表2中并不总是有数据,所以如果没有数据,我需要使用0。这是我到目前为止得到的结果,当表2中有数据时,它返回了错误的数量

SELECT 
    CONVERT(CHAR(10),table1.PostingDate, 120) AS business_date, 
    table1.Location AS store_number, 
    (CASE WHEN COUNT(table2.Document) > 0 THEN 
          SUM(table1.Total - table1.TipAmount + table2.Total)
          Else 
                SUM(table1.Total-table1.TipAmount) 
    END) AS net_sales_ttl
FROM table1 
    left join table2 
        on CONVERT(CHAR(10),table1.PostingDate, 120) = CONVERT(CHAR(10),table2.PostingDate, 120)
WHERE table1.PostingDate between '2012-09-09' and '2012-09-16'
GROUP BY CONVERT(CHAR(10),table1.PostingDate, 120), table1.Location
结果如下:

business_date   store_number    net_sales_ttl
2012-09-09  xxx         1699.61
2012-09-10  xxx             923.56
2012-09-11  xxx             1230.93  <--This should be 1399.93
2012-09-12  xxx             874.98
2012-09-13  xxx             1342.21
2012-09-14  xxx             1609.6
2012-09-15  xxx             2324.31
由于某些原因,查询没有正确计算并返回错误的值。表2唯一有值的日期是09-11-12,该金额仅为-1.00。它给了我1230.93,与正确的值相差-169。我不知道-169是从哪里来的,它应该是-1.00。表1中的原始金额为1400.93,表2应从-1.00中减去,结果为1399.93

    Sample data:
    table1 has date, location, and sales
    09-09 1111 5.00
    09-10 1111 3.00
    09-11 1111 7.00
    09-12 1111 10.00
    table2 has refunds
    09-11 1111 -1.00

    Return set would look like this:
    09-09 1111 5.00
    09-10 1111 3.00
    09-11 1111 6.00   <--Reflecting the refund from table2
    09-12 1111 10.00
试一试

此外,一些样本数据也会有所帮助——光是总数是没有帮助的

根据您的示例数据,尝试以下操作

Select date, location, sum(sales)
from 
(
    select date, location, sales from table1 
    union
    select date, location, refunds from table2 
) v
group by date, location

这还不算每天的总数。它给了我table1Ok中的每一条记录,日期是一个时间戳,所以我转换了它,分组工作正常,但数字都比预期的高…我想这是因为table1.TipAmount现在没有被减去。是的,就是这样。我添加了减去TipAmount的函数,结果非常完美!
Select date, location, sum(sales)
from 
(
    select date, location, sales from table1 
    union
    select date, location, refunds from table2 
) v
group by date, location