我正在尝试使用Oracle数据源在SSRS中创建报告。这个问题的解决方案可以在SSRS中,但最好是在Oracle中。我无权修改表或在数据库中创建任何内容。
给出以下表格布局(请注意,这些表格是通过实际查询的表格的子查询进行的简化。):
表1(法案)
AccountID Period Tax
--------------------------
123 13/10 21.12
123 13/11 6.46
123 13/12 5.28
表2(调整)
AccountID Period Tax
--------------------------
123 13/11 -16.66
123 14/01 5.00
我正在寻找类似的结果:
AccountID Period Tax
--------------------------
123 13/10 21.12
123 13/11 -10.20
123 13/12 5.28
123 14/01 5.00
正如您所看到的,调整表中可能有一段时间的记录,并且在同一时期的Bills表中没有相应的记录(反之亦然)。我很难绕过如何修改我的查询以使其工作。以下查询是我正在使用的当前查询的伪代码版本。
SELECT A.AccountID, NVL(B.Period, C.Period) "Period", NVL(A.Tax, 0) + NVL(B.Tax, 0) "Tax"
FROM Account A
LEFT JOIN (SELECT AccountID, Period, SUM(Tax) "Tax"
FROM Bills
GROUP BY AccountID, Period) B ON A.AccountID = B.AccountID
LEFT JOIN (SELECT AccountID, Period, SUM(Tax) "Tax"
FROM Adjustments
GROUP BY AccountID, Period) C ON A.AccountID = C.AccountID
WHERE NVL(A.Tax, 0) + NVL(B.Tax, 0) <> 0
希望这是足够的信息。如果需要更多信息,请告诉我。
答案 0 :(得分:3)
Oracle 11g R2架构设置:
CREATE TABLE Bills ( AccountID , Period, Tax )
AS
SELECT 123, '13/10', 21.12 FROM DUAL
UNION ALL SELECT 123, '13/11', 6.46 FROM DUAL
UNION ALL SELECT 123, '13/12', 5.28 FROM DUAL;
CREATE TABLE Adjustments ( AccountID , Period, Tax )
AS
SELECT 123, '13/11', -16.66 FROM DUAL
UNION ALL SELECT 123, '14/01', 5.00 FROM DUAL;
查询1 :
SELECT AccountID, Period, SUM( Tax ) AS Tax
FROM ( SELECT * FROM Bills
UNION ALL
SELECT * FROM Adjustments )
GROUP BY AccountID, Period
ORDER BY AccountID, Period
<强> Results 强>:
| ACCOUNTID | PERIOD | TAX |
|-----------|--------|-------|
| 123 | 13/10 | 21.12 |
| 123 | 13/11 | -10.2 |
| 123 | 13/12 | 5.28 |
| 123 | 14/01 | 5 |