【问题标题】:Subtract Daily amount from Withdraw Amount从提款金额中减去每日金额
【发布时间】:2021-02-09 15:33:46
【问题描述】:

我有两张桌子,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

【问题讨论】:

  • 您使用的是 SQL Server 2012 还是 2017?快递还是不快递?这与 C# 有什么关系?不要标记垃圾邮件,只添加与您的问题相关的内容。
  • “我使用了以下加入,但效果不佳” 什么不工作?你得到的结果有什么“错误”?您期望的结果是什么?
  • @Larnu 我正在使用 sql server 2017 。我使用 C# 作为我的编程语言。你能帮我吗
  • 所以您想要 C# 中的解决方案,而不是 SQL?如果是这样,请向我们展示您的 C# 而不是您的 SQL。
  • 取款价格应为8460,总和后利润金额应为64880

标签: sql sql-server tsql


【解决方案1】:

这是我基于 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;

【讨论】:

  • 哇。谢谢@Eli。它按预期工作。我有一个问题。我想减去 AMOUNT - PRICE 然后我想在另一列中显示结果。你能把代码发给我吗?您可以编辑上面的代码
  • 快乐 - 享受
【解决方案2】:

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

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

【讨论】:

  • 非常感谢。你的答案是正确的。但是 diff_price_amount 必须是 64880 而不是 -56420.00
  • 64880 只是所有金额的总和。我以为你想“减去这样的价格 - 金额”然后减去什么?
  • 错误 2546。操作。不,亲爱的,我想对这两列求和,接下来我想减去 Amount - Price 。我已经这样做了。你可以看到答案。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-16
  • 1970-01-01
  • 1970-01-01
  • 2015-10-11
  • 1970-01-01
  • 2023-03-20
  • 1970-01-01
相关资源
最近更新 更多