首页 > 解决方案 > 基于另一个字段的字段求和

问题描述

我正在 iReport 中创建报告。我正在使用 postgresql9.2 数据库。尝试基于另一个字段创建总和。首先,我按车辆编号按字段创建报告分组,然后创建一个变量,我试图在其中按字段分组执行求和。

我的报告结果

vh_name    |  va_date   | trip_no |
Vehicle-01 | 2019-01-15 |   1     |
Vehicle-01 | 2019-01-15 |   1     |
Vehicle-01 | 2019-01-16 |   1     |
-----------+------------+---------+
Vehicle-02 | 2019-01-17 |   1     |
Vehicle-02 | 2019-01-18 |   1     |
Vehicle-02 | 2019-01-19 |   1     |
-----------+------------+---------+
Vehicle-03 | 2019-01-17 |   1     |
Vehicle-03 | 2019-01-17 |   1     |
Vehicle-03 | 2019-01-17 |   1     |
Vehicle-03 | 2019-01-18 |   1     |
-----------+------------+---------+

我的预期结果

vh_name    |  va_date   | trip_no | total_trip |
Vehicle-01 | 2019-01-15 |   1     |            |
Vehicle-01 | 2019-01-15 |   1     |     3      |
Vehicle-01 | 2019-01-16 |   1     |            |
-----------+------------+---------+-------------
Vehicle-02 | 2019-01-17 |   1     |            |
Vehicle-02 | 2019-01-18 |   1     |     3      |
Vehicle-02 | 2019-01-19 |   1     |            |
-----------+------------+---------+-------------
Vehicle-03 | 2019-01-17 |   1     |            |
Vehicle-03 | 2019-01-17 |   1     |            |
Vehicle-03 | 2019-01-17 |   1     |      4     |
Vehicle-03 | 2019-01-18 |   1     |            |
-----------+------------+---------+-------------

标签: jasper-reportspostgresql-9.2

解决方案


基于Using SUM() without grouping results,您的 SQL 应该如下所示:

SELECT vh_name, va_dat, trip_no, SUM(trip_sum.amount) as trip_sum
FROM my_trips
CROSS JOIN (
    SELECT SUM(amount) as amount FROM my_trips AS amount
    GROUP BY vh_name) trip_sum

请注意,唯一计数可能更容易(如果 trip_no 始终为 1):

SELECT vh_name, va_dat, trip_no, COUNT(DISTINCT vh_name) as amount
FROM my_trips

推荐阅读