【问题标题】:How to use alias of a subquery to get the running total?如何使用子查询的别名来获取运行总数?
【发布时间】:2018-03-10 00:54:21
【问题描述】:

我有 3 个表的 UNION 用于计算一些余额,我需要获得该余额的运行 SUM 但我不能使用 PARTITION OVER,因为我必须使用可以在 Access 中工作。 我的问题是我不能在别名子查询上使用JOIN,它不起作用。

如何在JOIN 中使用别名来获取运行总数?

或任何其他方式获取SUM 不包含PARTITION OVER,因为它在Access 中不存在。 到目前为止,这是我的代码:

SELECT korisnik_id, imePrezime, datum, Dug, Pot, (Dug - Pot) AS Balance
FROM (
    SELECT korisnik_id, k.imePrezime, r.datum, SUM(IIF(u.jedinstven = 1, r.cena, k.kvadratura * r.cena)) AS Dug, '0' AS Pot
    FROM Racun r
    INNER JOIN Usluge u ON r.usluga_id = u.ID
    INNER JOIN Korisnik k ON r.korisnik_id = k.ID
    WHERE korisnik_id = 1
        AND r.zgrada_id = 1
        AND r.mesec = 1
        AND r.godina = 2017
    GROUP BY korisnik_id, k.imePrezime, r.datum

    UNION ALL

    SELECT korisnik_id, k.imePrezime, rp.datum, SUM(IIF(u.jedinstven = 1, rp.cena, k.kvadratura * rp.cena)) AS Dug, '0' AS Pot
    FROM RacunP rp
    INNER JOIN Usluge u ON rp.usluga_id = u.ID
    INNER JOIN Korisnik k ON rp.korisnik_id = k.ID
    WHERE korisnik_id = 1
        AND rp.zgrada_id = 1
        AND rp.mesec = 1
        AND rp.godina = 2017
    GROUP BY korisnik_id, k.imePrezime, rp.datum

    UNION ALL

    SELECT uu.korisnik_id, k.imePrezime, uu.datum, '0' AS Dug, SUM(uu.iznos) AS Pot
    FROM UnosUplata uu
    INNER JOIN Korisnik k ON uu.korisnik_id = k.ID
    WHERE korisnik_id = 1
    GROUP BY uu.korisnik_id, k.imePrezime, uu.datum
    ) AS a
ORDER BY korisnik_id

【问题讨论】:

  • 你使用的是SQL Server还是MS Access
  • 你搜索过运行总计、运行余额、运行总和吗?共同话题。最简单的方法是在报表上使用文本框的 RunningSum 属性。
  • 我正在使用 MS Access。我已经在水晶报表中使用运行 sum 解决了我的问题,但我没有在 sql 查询中找到如何做到这一点。我已经搜索过了,但是每个查询都会与表本身进行连接。这里我的表有一个别名,我不能加入别名本身
  • 查看该查询,然后使用别名。

标签: sql ms-access cumulative-sum


【解决方案1】:

您可以为 3 个表中的 UNION 保存一个查询(我们将其命名为 Query1),然后创建另一个查询,该查询返回第一个查询中的每一行并计算它之前的行的总和(可选地检查它们是否在同一组中)。

应该是这样的:

SELECT *, (
    SELECT SUM(Value) FROM Query1 AS b 
    WHERE b.GroupNumber=a.GroupNumber
    AND b.Position<=a.Position
) AS RunningSum
FROM Query1 AS a

但是,在报告中这样做会更有效率。

【讨论】:

  • 谢谢。我不知道保存和使用查询是否可行,因为我使用的是 C# 和 OleDb。
  • 目前,我正在计算报告中的总数,但也很高兴知道这个答案:)
猜你喜欢
  • 1970-01-01
  • 2015-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-16
  • 2023-03-30
  • 1970-01-01
  • 2014-08-22
相关资源
最近更新 更多