加入两组数据,其中两者都不需要密钥

时间:2013-12-31 20:54:57

标签: oracle reporting-services ssrs-2008

我正在尝试使用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

希望这是足够的信息。如果需要更多信息,请告诉我。

1 个答案:

答案 0 :(得分:3)

SQL Fiddle

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 |