从提款金额中减去每日金额

时间:2021-02-09 15:33:46

标签: sql sql-server tsql

我有两个表,tblWithdrawtblProfit

tblWithdraw 表

WithdrawId    Date           User        Price
-----------------------------------------------------
1          2021-02-09       SANDANUWAN  2000.00
2          2021-02-09       GAYAN        300.00
3          2021-02-09       KASUN       1500.00
4          2021-02-09       AMAL        4000.00
5          2021-02-09       UDARA        340.00
6          2021-02-09       SULIN        200.00
7          2021-02-09       PERERA       120.00

tbl利润表

Id  Date        Inv.No     ItemName       ItemCode  Qty CostPrice   DiscountPrice       Amount
----------------------------------------------------------------------------------------------
1   2021-02-09  INV0000001  DELL LAP      LP001     5   1500.00     1900.00            9500.00        
2   2021-02-09  INV0000001  HP MOUSE      MO001     7   2500.00     2940.00           20580.00  
3   2021-02-09  INV0000001  PACIFIC FAN   FAN001    6   2000.00     4000.00           24000.00  
4   2021-02-09  INV0000001  SAMSUNG PHONE PH001     8   1000.00     1350.00           10800.00  

这是我的问题。我想根据日期汇总 tblWithdraw 表中的所有价格。它的平均提款日期和利润表必须匹配。新的我想对 tblProfit 表中的所有金额求和。然后我想像这样减去 Price - Amount。最后我想显示减去后的利润表总额。我使用了以下加入但效果不佳。请帮我解决这个问题。我想根据日期减去。

Select MAX(w.Date)Date, SUM(w.Price)Price, SUM(p.Amount)Amount
From tblWithdraw w
Left Join tblProfit p
ON w.Date = p.CurrentDate
Group by w.Date

输出是这样的。错了。

Date        Price       Amount
2021-02-09  33840.00    454160.00

2 个答案:

答案 0 :(得分:0)

我不确定我是否完全理解这个问题,这就是我的阅读方式:

Select w.Date, 
       w.agg_price_by_date, 
       w.agg_price_by_date - COALESCE(p.agg_amount_by_date, 0) AS diff_price_amount
From (SELECT Date,
             SUM(Price) AS agg_price_by_date
        FROM tblWithdraw w
       GROUP
          BY Date
     ) w
Left Join
    (SELECT CurrentDate,
            SUM(Amount) AS agg_amount_by_date
       FROM tblProfit
      GROUP
         BY CurrentDate
     ) p
ON w.Date = p.CurrentDate

答案 1 :(得分:0)

这是基于我对最初问题所做评论的基于 CTE 的方法。

WITH WithDraw AS(
   SELECT 
         [date]
        ,SUM(price) PRICE
   FROM tblWithdraw 
   GROUP BY [date]
),
Profit AS(
    SELECT 
         [date]
        ,SUM(amount)AMOUNT
    FROM tblProfit
    GROUP BY [date]
) 
SELECT 
     W.DATE
    ,W.PRICE
    ,P.AMOUNT
FROM WithDraw W
INNER JOIN Profit P ON w.date = p.date;