如果满足另一个条件,则SSRS / T-SQL总和

时间:2014-06-19 20:15:09

标签: sql sql-server tsql reporting-services

基本上我有一个处理交易的应用程序。每笔交易都有一个交易号。在前面的应用程序视图中,计算每个事务的总数,但它不存储在数据库中(并且不能更改)

现在,在SSRS中,他们希望看到报告中的价值。这样做的方法是匹配交易号码,如果它们匹配(无论有多少记录),它会添加它们是否有办法在SSRS上执行此操作?或者更优雅的方法是在存储过程中执行此操作。

以下是我知道不会起作用的例子,只是为了让你知道我在这里想要完成的事情:

SELECT  transactionID
        , value
        , Sum(Case When transactionID = TransactionID Then Value Else 0) As Total

编辑:回复一些评论,我做了这个编辑。首先在上面我犯了一个错误并且做了TransactionID = transaction但它应该是它当前的。

继续...为了做到这一点,我需要将交易号与数据集中的其他交易号相匹配,看看是否有匹配。为了说明我在下面做了这个例子:

这是一个示例数据集:

  • TransId:1 Value:200
  • TransId:2 Value:300
  • TransId:1 Value:100
  • TransId:2 Value:500
  • TransId:1 Value:400

从这个数据集中,我应该在报告中获得这些值:

  • TransId:1 Value:200总计:700
  • TransId:2 Value:300总计:800
  • TransId:1 Value:100总计:700
  • TransId:2 Value:500总计:800
  • TransId:1 Value:400总计:700

因此,对于每一行,我希望看到每条记录的完整总数(TransID),​​而不是总数。

3 个答案:

答案 0 :(得分:0)

这应该可以解决问题

select transactionID
     , value
     , TransactionSum
 from MyTable t
  join (select transactionID 
             , sum (value) as TransactionSum 
          from MyTable
         group by transactionID
       ) x on t.transactionID = x.transactionID

答案 1 :(得分:0)

另一种做法

select a.transid,
       a.value,
       (select sum(b.value) from yourTable b where b.transid = a.transid) as Total
from yourTable a

答案 2 :(得分:0)

Window functions虽然更加有趣:

SELECT TransactionId
    , Value
    , SUM(Value) OVER(PARTITION BY TransactionId) AS Total
FROM SomeTable

SQL Fiddle