首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >总和与部分和

总和与部分和
EN

Stack Overflow用户
提问于 2017-07-25 21:28:33
回答 4查看 2.2K关注 0票数 1

我目前正在使用SSMS。我正在提取数据,并试图获得两个不同的列,这些列将价格相加。'ChangeSpend‘和'TotalSpend’这两列都引用了同一列,这就是我遇到问题的地方。

我希望ChangeSpend返回每个收据以V.Ch%开头的所有代码的总和(因此它们排除了所有其他代码),并希望TotalSpend返回每个收据的所有代码的总和。

下面是我当前的代码:

代码语言:javascript
复制
SELECT 
      Receipt
      ,ReceiptCode
      ,ReceiptAmount
      ,sum(ReceiptAmount) over (Partition by Receipt) as TotalSpend
      ,(CASE WHEN ReceiptCode = 'V.Ch%' then sum(ReceiptAmount) 
                                             over (Partition by Receipt) 
      ELSE 0
      END) as ChangeSpend
  FROM tableA
  LEFT OUTER JOIN tableB
  on A.Receipt = B.Receipt
  WHERE ReceiptCode LIKE 'V.%'
  ORDER BY Receipt

但是,我的查询当前打印以下内容:

代码语言:javascript
复制
Receipt    ReceiptCode    ReceiptAmount    TotalSpend    ChangeSpend
1          v.cha          5                20            0         
1          v.rt           2                20            0
1          v.chb          6                20            0
1          v.abc          7                20            0
2          v.cha          20               21            0
2          v.abc          1                21            0
3          v.cha          4                14            0
3          v.chb          1                14            0
3          v.tye          7                14            0
3          v.chs          2                14            0

我想让它打印这个:

代码语言:javascript
复制
Receipt    ReceiptCode    ReceiptAmount    TotalSpend    ChangeSpend
1          v.cha          5                20            11         
1          v.rt           2                20            11
1          v.chb          6                20            11
1          v.abc          7                20            11
2          v.cha          20               21            20
2          v.abc          1                21            20
3          v.cha          4                14            7
3          v.chb          1                14            7
3          v.tye          7                14            7
3          v.chs          2                14            7

谢谢你的帮助

EN

回答 4

Stack Overflow用户

发布于 2017-07-25 21:32:58

你必须把金额放在案例之外,而不是反过来:

代码语言:javascript
复制
SUM(CASE WHEN SomeCondition=true THEN MyColumn ELSE 0 END)
票数 1
EN

Stack Overflow用户

发布于 2017-07-25 21:33:42

尝试

代码语言:javascript
复制
,SUM(CASE WHEN ReceiptCode LIKE 'V.Ch%' THEN ReceiptAmount ELSE 0 END) 
 OVER (Partition by Receipt) 
   AS ChangeSpend
票数 0
EN

Stack Overflow用户

发布于 2017-07-25 21:33:42

代码语言:javascript
复制
    SUM(
CASE WHEN ReceiptCode like 'V.Ch%' then ReceiptAmount ELSE 0 END) as ChangeSpend
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45304816

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档