当前位置: 首页 > 面试题库 >

从行和列计算问题(将两列与另一行的第三列相加)

邵阳辉
2023-03-14
问题内容

SELECT AcctId,Date,
Sum(CASE
WHEN DC = ‘C’ THEN TrnAmt
ELSE 0
END) AS C,
Sum(CASE
WHEN DC = ‘D’ THEN TrnAmt
ELSE 0
END) AS D
FROM Table1 where AcctId = ‘51’
GROUP BY AcctId,Date
ORDER BY AcctId,Date

我执行了上面的查询,并得到了我想要的结果。

  AcctId       Date         C        D
    51       2012-12-04   15000      0
    51       2012-12-05   150000  160596
    51       2012-12-06    600        0

现在我要对同一查询执行另一个操作,即

我需要这样的结果

  AcctId   Date                                Result

    51       2012-12-04    (15000-0)->       15000  
    51       2012-12-05   (150000-160596) + (15000->The first value)  4404
    51       2012-12-06     600-0         +(4404 ->The calculated 2nd value) 5004

有可能使用相同的查询吗?


问题答案:

使用递归CTE

;WITH cte AS
 (
  SELECT AcctId, Date,
     Sum(CASE
           WHEN DC = 'C' THEN TrnAmt
           ELSE 0
         END) AS C,
     Sum(CASE
           WHEN DC = 'D' THEN TrnAmt
           ELSE 0
         END) AS D,
     ROW_NUMBER() OVER (ORDER BY AcctId, Date) AS Id 
  FROM   Table1 where AcctId = '51'
  GROUP  BY AcctId, Date
  ), cte2 AS
 (
  SELECT Id, AcctId, Date, C, D, (C - 0) AS Result
  FROM cte
  WHERE Id = 1
  UNION ALL
  SELECT c.Id, c.AcctId, c.Date, c.C, c.D, (c.C - c.D) + ct.Result
  FROM cte c JOIN cte2 ct ON c.Id = ct.Id + 1
  )
  SELECT *
  FROM cte2

SQLFiddle上的 简单示例
****



 类似资料:
  • 问题内容: 我有一个表,其中包含商店中每件商品的单价和其他详细信息。 另一个包含每个订单中包含的项目的详细信息。 现在我要计算 请注意,我希望它成为表本身的一部分,而不是作为其他视图或查询。我怎样才能做到这一点?我为此研究了触发器和其他机制,但是它们是否适用于不同表中的值,尤其是在存在此类约束的情况下? 我尝试过根据另一列计算出的Column进行以下触发吗?: 但这似乎没有用 问题答案: 这是如何

  • 问题内容: 我需要在SQL Server数据库中创建一列。 该列的值应基于该列的值进行计算。 同样,它的值应该随着增加而增加。 问题答案: 您应该使用计算列来解决此问题。具有类似以下内容的定义: 原始声明摘自BlackWasp并提供了更多信息。 编辑: MSDN将计算列解释为: 从可以使用同一表中其他列的表达式中计算出计算列。该表达式可以是非计算的列名,常量,函数,以及由一个或多个运算符连接的这些

  • 问题内容: 我有一张桌子 提供值后,需要计算为 我想乘和列并将结果存储在同一表的列中。 我已经试过了: 但是失败了! 有人请帮助我实现这一目标。 问题答案: 尝试更新表格

  • 问题内容: 我确信必须有一个相对简单的方法来执行此操作,但是此刻正在使我逃脱。假设我有一个这样的SQL表: 现在,我想知道A和B列的每种值组合出现多少次,而与其他列无关。因此,在此示例中,我想要这样的输出: 用什么SQL来确定呢?我觉得这绝对不是一件很不常见的事情。 谢谢! 问题答案:

  • DB有一个表,即。这些字段包括,,。 我需要得到属于某个且具有相同值的行的数量总和。 例如,表中有值:(2,3,4),(2,1,5),( 1 2,2,4),然后我需要获得以及第一行和第三行中其他列的总和。第二行也将出现在结果中。 让我们假设控制器名称为,模型名称为。 我应该如何编写查询? 编辑:表格有以下值:(2,3,4),(2,1,5),( 1 2,2,4)

  • 问题内容: 在Pandas DataFrame中,我可以使用函数将列值与另一列进行匹配。 例如:假设我们有一个DataFrame: 和另一个DataFrame: 我可以使用的功能相匹配的列值对的列值 例如: 产量: PySpark DataFrame中的等效操作是什么? 上面的代码给我一条错误消息: 问题答案: 这种操作在spark中称为“左半联接”: