Report Builder 3.0 查询 Oracle 数据库中的 SUM 结果加倍

SUM result doubling in Report Builder 3.0 query to Oracle db

我需要在 table 中获取不包括“滞纳金”和“备案费”的费用总额,然后是在验证正确许可证时包括那些费用在内的费用总额ID。当我尝试将第二笔费用添加到查询时,它会使费用加倍。这是我目前所拥有的。

SELECT 
  PERMIT.CODE,
  PERMIT.ID2,
  PERMIT.ID1,
  PERMIT.ID3,
  SUM(ITEM.FEE) AS TotalFee,
FROM 
  PERMIT,
  ITEM
AND PERMIT.CODE        = ITEM.CODE
AND PERMIT.ID1         = ITEM.ID1
AND PERMIT.ID2         = ITEM.ID2
AND PERMIT.ID3         = ITEM.ID3
AND ITEM.DESC           <> 'Late Fee'
AND ITEM.DESC           <> 'Filing Fee'

结果是正确的数字:

TOTALFEE
550
350

然而,当我将第二笔费用添加到查询中时:

SELECT 
  PERMIT.CODE,
  PERMIT.ID2,
  PERMIT.ID1,
  PERMIT.ID3,
  SUM(ITEM.FEE) AS TotalFee,
  SUM(t.FEE) AS Fee,
FROM 
  PERMIT,
  ITEM,
  ITEM t
AND PERMIT.CODE        = ITEM.CODE
AND PERMIT.ID1         = ITEM.ID1
AND PERMIT.ID2         = ITEM.ID2
AND PERMIT.ID3         = ITEM.ID3
AND ITEM.DESC           <> 'Late Fee'
AND ITEM.DESC           <> 'Filing Fee'
AND PERMIT.CODE        = t.CODE
AND PERMIT.ID1         = t.ID1
AND PERMIT.ID2         = t.ID2
AND PERMIT.ID3         = t.ID3 

我得到了相同的两行,但数字不对。 结果:

TOTALFEE | FEE
1650     | 1650
2100     | 2100

我做错了什么?

您的查询没有 group by,当您使用聚合函数时应该是这种情况。您也可以使用条件聚合获得所需的结果。

SELECT 
 PERMIT.CODE,
 PERMIT.ID2,
 PERMIT.ID1,
 PERMIT.ID3,
 SUM(case when ITEM.DESC <> 'Late Fee' then ITEM.FEE end) AS TotalFee,
 SUM(case when ITEM.DESC <> 'Filing Fee' then ITEM.FEE end) AS Fee
FROM PERMIT JOIN ITEM
ON PERMIT.CODE = ITEM.CODE
AND PERMIT.ID1 = ITEM.ID1
AND PERMIT.ID2 = ITEM.ID2
AND PERMIT.ID3 = ITEM.ID3
GROUP BY PERMIT.CODE, PERMIT.ID2, PERMIT.ID1, PERMIT.ID3