【问题标题】:Diffrence between sum of two products > 0两个产品之和之间的差异 > 0
【发布时间】:2021-07-04 00:23:52
【问题描述】:

我想选择事务等于 R 的 T_No 的总和,然后减去事务等于 D 的 T_No 的总和,对于作为输入的 CustomerID(声明的 int 输入),这个答案应该大于零在存储过程中)

((Sum(T_No) where Transactions = R - Sum(T_No) where Transactions = D ) > 0) where CoustomerID = @input

Example : for ID = 1 it would be ((20+15) - 10) > 0 

我尝试了很多东西,但要么语法错误、错误值或不接受,我真的被卡住了,这是我最后的尝试

SELECT 
(select ( select Sum(T_No) where Transactions = R) - (select Sum(T_No) where Transactions = D) as C_T ) 
FROM CustomerTrans WHERE C_T > 0 ;

【问题讨论】:

标签: mysql sql sql-server database select


【解决方案1】:

条件聚合应该会有所帮助:

SELECT
  SUM(CASE WHEN Transaction = 'R' THEN t_no ELSE 0 END) - SUM(CASE WHEN Transaction = 'D' THEN t_no ELSE 0 END) 
FROM CustomerTrans 
WHERE CoustomerID = @yourCustomerIdVariable

当您编写存储过程时,您可以将其结果分配给一个变量,然后决定如果结果是否定的该怎么办。 (例如,我会亲自记录一个错误,而不仅仅是隐藏这些结果)。如果结果为空,则该客户没有交易

ps;我使用了Transaction,因为这就是您的屏幕截图显示的内容,而且我认为屏幕截图不太可能包含拼写错误,而不是带有语法错误的代码。根据需要进行调整

【讨论】:

    【解决方案2】:

    你有点接近,我想和你一样,只是语法有点偏离,你不能在 Where 中有聚合字段,这就是为什么你应该使用 have,还有语法不正确的情况。

    Select
    CoustomerID,
    Sum(case when Transactions = 'R' then T_No else 0 end) -
    Sum(case when Transactions = 'D' then T_No else 0 end) as C_T
    FROM CustomerTrans
    group by CoustomerID
    having (Sum(case when Transactions = 'R' then T_No else 0 end) -
    Sum(case when Transactions = 'D' then T_No else 0 end))>0
    

    【讨论】:

      猜你喜欢
      • 2018-11-22
      • 1970-01-01
      • 1970-01-01
      • 2023-03-24
      • 1970-01-01
      • 2019-10-19
      • 2011-10-29
      • 2013-04-12
      • 1970-01-01
      相关资源
      最近更新 更多