Full Outter Join

I have the following PL/SQL that insert into the table ag_comm_statement from 3 data sets, a, b and c. May anybody know how to make a full outter joins for data set a and c (See the section in bold below)? Many thanks in advance.
insert into ag_comm_statement
( month_key
,commission_no
,comm_cutoff_date
,branch_code
,branch_name
-- DW001 Old Start
-- ,product_category
-- DW001 Old End
-- DW001 New Start
-- ,product_desc
-- DW001 New End
,product_name
,payment_mode
,fy_no_of_policy
,fy_annualised_premium
,fy_commission_premium
,fy_commission
,renew_no_of_policy
,renew_commission_premium
,renew_commission
select v_month_key
,v_commission_no
,v_comm_cutoff_date
,a.branch_code
,a.branch_name
-- DW001 Old Start
-- ,decode(a.product_code,'0107000000','GRIP','0640000000','MISO') product_category
-- DW001 Old End
-- DW001 New Start
-- ,pd.category_desc product_category
-- ,pd.plan_code_desc product_desc
-- DW001 New End
,b.basic_plan_code product_name
,decode(b.payment_mthd,'S','S',lpad(b.payment_mode,2,'0')) payment_mode
,count(distinct a.policy_no) fy_no_of_policy
,sum(b.afyp) fy_annualised_premium
,sum(a.premium) fy_commission_premium
,sum(a.fy_commission) fy_commission
,count(distinct c.policy_no) renew_no_of_policy
,sum(c.premium) renew_commission_premium
,sum(c.fy_commission) renew_commission
from (select a.policy_no
,a.product_code
,b.branch_code
,b.branch_name
,sum(round((a.comm_orig_curr * c.spot_rate),2)) fy_commission
,sum(a.premium * c.spot_rate) premium
-- DW001 New Start
-- ,a.plan_code
-- DW001 New End
from dwh.ag_comm_work a
,dwh.agent_details@dhkp b
,dwh.ag_comm_exchange_rate c
where a.branch_code = '82610'
and a.run_date between v_prev_cutoff_date + 1
and v_comm_cutoff_date
and a.ptype in ('01','02','03','04','05','11','20')
and a.reason_code in ('112','114','115')
and a.agent_code = b.agent_code
and a.currency = c.ais_code (+)
and c.run_date = v_comm_cutoff_date
group by
a.policy_no
,a.product_code
,b.branch_code
,b.branch_name
-- DW001 New Start
-- ,a.plan_code
-- DW001 New End
) a
,bis_weekly_data@chkp b
-- DW001 New Start
-- ,dwh.product_dim pd
-- DW001 New End
,(select a.policy_no
,a.product_code
,b.branch_code
,b.branch_name
,sum(round((a.comm_orig_curr * c.spot_rate),2)) fy_commission
,sum(a.premium * c.spot_rate) premium
from dwh.ag_comm_work a
,dwh.agent_details@dhkp b
,dwh.ag_comm_exchange_rate c
where a.branch_code = '82610'
and a.run_date between v_prev_cutoff_date + 1
and v_comm_cutoff_date
and a.ptype in ('01','02','03','04','05','11','20')
and a.reason_code in ('131','132')
and a.agent_code = b.agent_code
and a.currency = c.ais_code (+)
and c.run_date = v_comm_cutoff_date
group by
a.policy_no
,a.product_code
,b.branch_code
,b.branch_name
) c
where a.policy_no = substr(b.contract_no (+),3, 7)
and c.policy_no (+) = a.policy_no
and c.branch_code (+) = a.branch_code
and c.product_code (+) = a.product_code
-- DW001 New Start
-- and pd.plan_code = a.plan_code
-- and pd.coverage_indicator = 'BASIC'
-- and pd.level_col = 'DETAIL'
-- DW001 New End
group by
a.branch_code
,a.branch_name
,a.product_code
,b.basic_plan_code
,b.payment_mode
,b.payment_mthd
-- DW001 New Start
-- ,pd.category_desc
-- ,pd.plan_code_desc
-- DW001 New End
exception
when others then
dbms_output.put_line('insert data error!');
rollback;
raise;

Hi psiplaw
First of all yours query is too complex to understand ,why dont you create view for table c and then use full outer join??
select e.empno,e.ename,d.deptno,d.dname,l.locid
from emp e
full outer join dept d on (e.deptno=d.deptno)
full outer join location l on (d.locid=l.locid);
any how have a look there
http://asktom.oracle.com/pls/ask/f?p=4950:8:1563052620953158875::NO::F4950_P8_DISPLAYID,F4950_P8_CRITERIA:7350850093871
Message was edited by:
pcbyte12
Message was edited by:
pcbyte12

Similar Messages

  • Issue found with Oracle 11.2.0.2 left outter joins.

    When performing a left outter join, that returns no data - we are seeing an issue with 11.2.0.2 where it does not return any rows at all - where it should in fact return one row with null data. We have thoroughly tested this against 11.2.0.1 as well as 10g and found no issues, but for some reason 11.2.0.2 does not perform as expected.
    The following queries demonstrate what we're experiencing, and the subsequent DDL / DML will expose this issue on a 11.2.0.2 oracle DB.
    -- QUERIES --
    --Query that exposes the LOJ issue (should return one row with 4 null columns)
    -- RETURNS: NO ROWS ARE RETURNED
    SELECT lt.*
    FROM Attr attr
    JOIN Obj obj ON attr.id = obj.id
    LEFT OUTER JOIN Loc_Txt lt ON attr.id = lt.objectid AND lt.typeid = 851 AND 1 = 2
    WHERE attr.id = 225;
    --PLEASE NOTE, the 'AND 1 = 2' is necessary for our particular use case.  While this doesn't make much logical sense here, it is necessary to expose this issue.
    --Query - shows the expected behavior by simply adding a column that is not null.
    --RETURNS: ONE ROW RETURNED with first 4 columns null, and '225' for obj.id.
    SELECT lt.*, obj.id
    FROM Attr attr
    JOIN Obj obj ON attr.id = obj.id
    LEFT OUTER JOIN Loc_Txt lt ON attr.id = lt.objectid AND lt.typeid = 851 AND 1 = 2
    WHERE attr.id = 225;
    --Query - shows that the expected behavior also resumes by swapping the LoJ against obj.id instead of attr.id.  Since these tables are joined together by id, this should be ARBITRARY!
    -- RETURNS: ONE ROW RETURNED with first 4 columns null, and '225' for obj.id
    SELECT lt.*
    FROM Attr attr
    JOIN Obj obj ON attr.id = obj.id
    LEFT OUTER JOIN Loc_Txt lt ON obj.id = lt.objectid AND lt.typeid = 851 AND 1 = 2
    WHERE attr.id = 225;
    -- DDL --
    -- OBJ TABLE --
    CREATE TABLE "TESTDB"."OBJ"
         "ID" NUMBER(10,0) NOT NULL ENABLE
         ,"TYPEID" NUMBER(10,0) NOT NULL ENABLE
         ,CONSTRAINT "OBJ_PK" PRIMARY KEY ("ID") RELY ENABLE
    commit;
    -- LOC_TXT TABLE --
    CREATE TABLE "TESTDB"."LOC_TXT"
         "ID" NUMBER(10,0) NOT NULL ENABLE,
         "OBJECTID" NUMBER(10,0) NOT NULL ENABLE,
    "TYPEID" NUMBER(10,0) NOT NULL ENABLE,
         "VALUE" NVARCHAR2(400) NOT NULL ENABLE,
         CONSTRAINT "LOC_TXT_PK" PRIMARY KEY ("ID") RELY ENABLE,
         CONSTRAINT "LOC_TXT1_FK" FOREIGN KEY ("OBJECTID") REFERENCES "TESTDB"."OBJ" ("ID") RELY ENABLE
    commit;
    -- ATTR TABLE --
    CREATE TABLE "TESTDB"."ATTR"
         "ID" NUMBER(10,0) NOT NULL ENABLE,
         "ATTRIBUTEVALUE" NVARCHAR2(255),
         CONSTRAINT "ATTR_PK" PRIMARY KEY ("ID") RELY ENABLE,
         CONSTRAINT "ATTR_FK" FOREIGN KEY ("ID") REFERENCES "TESTDB"."OBJ" ("ID") RELY ENABLE
    commit;
    -- DATA --
    insert into obj (id, typeid) values(225, 174);
    insert into attr (id, attributevalue) values(225, 'abc');
    insert into obj (id, typeid) values(2274, 846);
    insert into loc_txt(id, objectid, typeid, value) values(540, 2274, 851, 'Core Type');
    commit;
    -- DROP TABLES --
    --DROP TABLE "TESTDB"."ATTR";
    --DROP TABLE "TESTDB"."LOC_TXT";
    --DROP TABLE "TESTDB"."OBJ";
    --commit;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       

    Whilst I agree that your test cases do show some anomalies, the statement logic does smell a little odd.
    In general, I'd be wary of trying to reproduce issues using hardcoded conditions such as "AND 1=2".
    As this predicate can be evaluated at parse time, you can get plans which are not representative of run time issues.
    However....
    The trouble with ANSI - trouble as in it seems to have a lot of bugs/issues - is that it is always transformed to orthodox Oracle syntax prior to execution - you can see this in a 10053 trace file. This is possibly not helped by the distinction ANSI has between join predicates and filter predicates - something that Oracle syntax does not really have without rewriting the SQL significantly.
    For more information on a similar sounding ANSI problem, see http://jonathanlewis.wordpress.com/2011/08/03/trouble-shooting-4/
    Yours might not even be ANSI related.
    If you check the execution plan - particularly the predicates section, then you can see some of the issues/symptoms.
    See the "NULL IS NOT NULL" FILTER operation at Id 1.
    SQL> select * from v$version;
    BANNER
    Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
    PL/SQL Release 11.2.0.2.0 - Production
    CORE    11.2.0.2.0      Production
    TNS for Linux: Version 11.2.0.2.0 - Production
    NLSRTL Version 11.2.0.2.0 - Production
    SQL> SELECT lt.*
      2  FROM Attr attr
      3  JOIN Obj obj ON attr.id = obj.id
      4  LEFT OUTER JOIN Loc_Txt lt ON attr.id = lt.objectid AND lt.typeid = 851 AND 1 = 2
      5  WHERE attr.id = 225;
    no rows selected
    SQL> explain plan for
      2  SELECT lt.*
      3  FROM Attr attr
      4  JOIN Obj obj ON attr.id = obj.id
      5  LEFT OUTER JOIN Loc_Txt lt ON attr.id = lt.objectid AND lt.typeid = 851 AND 1 = 2
      6  WHERE attr.id = 225;
    Explained.
    SQL> select * from table(dbms_xplan.display);
    PLAN_TABLE_OUTPUT
    Plan hash value: 1392151118
    | Id  | Operation            | Name    | Rows  | Bytes | Cost (%CPU)| Time     |
    |   0 | SELECT STATEMENT     |         |     1 |   454 |     0   (0)|          |
    |*  1 |  FILTER              |         |       |       |            |          |
    |   2 |   NESTED LOOPS OUTER |         |     1 |   454 |     4   (0)| 00:00:01 |
    |*  3 |    INDEX UNIQUE SCAN | ATTR_PK |     1 |    13 |     1   (0)| 00:00:01 |
    |   4 |    VIEW              |         |     1 |   441 |     3   (0)| 00:00:01 |
    |*  5 |     TABLE ACCESS FULL| LOC_TXT |     1 |   441 |     3   (0)| 00:00:01 |
    Predicate Information (identified by operation id):
       1 - filter(NULL IS NOT NULL)
       3 - access("ATTR"."ID"=225)
       5 - filter("ATTR"."ID"="LT"."OBJECTID" AND "LT"."TYPEID"=851)
    Note
       - dynamic sampling used for this statement (level=4)
    23 rows selected.
    SQL> Whereas in the next example, the FILTER operation has moved further down.
    SQL> SELECT lt.*, obj.id
      2  FROM Attr attr
      3  JOIN Obj obj ON attr.id = obj.id
      4  LEFT OUTER JOIN Loc_Txt lt ON attr.id = lt.objectid AND lt.typeid = 851 AND 1 = 2
      5  WHERE attr.id = 225;
            ID   OBJECTID     TYPEID
    VALUE
            ID
           225
    1 row selected.
    SQL> explain plan for
      2  SELECT lt.*, obj.id
      3  FROM Attr attr
      4  JOIN Obj obj ON attr.id = obj.id
      5  LEFT OUTER JOIN Loc_Txt lt ON attr.id = lt.objectid AND lt.typeid = 851 AND 1 = 2
      6  WHERE attr.id = 225;
    Explained.
    SQL> select * from table(dbms_xplan.display);
    PLAN_TABLE_OUTPUT
    Plan hash value: 2816285829
    | Id  | Operation            | Name    | Rows  | Bytes | Cost (%CPU)| Time     |
    |   0 | SELECT STATEMENT     |         |     1 |   454 |     1   (0)| 00:00:01 |
    |   1 |  NESTED LOOPS OUTER  |         |     1 |   454 |     1   (0)| 00:00:01 |
    |*  2 |   INDEX UNIQUE SCAN  | ATTR_PK |     1 |    13 |     1   (0)| 00:00:01 |
    |   3 |   VIEW               |         |     1 |   441 |            |          |
    |*  4 |    FILTER            |         |       |       |            |          |
    |*  5 |     TABLE ACCESS FULL| LOC_TXT |     1 |   441 |     3   (0)| 00:00:01 |
    Predicate Information (identified by operation id):
       2 - access("ATTR"."ID"=225)
       4 - filter(NULL IS NOT NULL)
       5 - filter("ATTR"."ID"="LT"."OBJECTID" AND "LT"."TYPEID"=851)
    Note
       - dynamic sampling used for this statement (level=4)
    23 rows selected.
    SQL> However, you might have also noticed that OBJ is not referenced at all in the execution plans - this may indicate where the issue lies, maybe in conjunction with ANSI or it may be nothing to do with ANSI.
    The foreign key constraint means that any reference to OBJ can be rewritten and eliminated.
    So, if we remove the foreign key constraint, we get the expected one row with all null values returned:
    SQL> alter table attr drop constraint attr_fk;
    Table altered.
    SQL> SELECT lt.*
      2  FROM Attr attr
      3  JOIN Obj obj ON attr.id = obj.id
      4  LEFT OUTER JOIN Loc_Txt lt ON attr.id = lt.objectid AND lt.typeid = 851 AND 1 = 2
      5  WHERE attr.id = 225;
            ID   OBJECTID     TYPEID
    VALUE
    1 row selected.
    SQL> explain plan for
      2  SELECT lt.*
      3  FROM Attr attr
      4  JOIN Obj obj ON attr.id = obj.id
      5  LEFT OUTER JOIN Loc_Txt lt ON attr.id = lt.objectid AND lt.typeid = 851 AND 1 = 2
      6  WHERE attr.id = 225;
    Explained.
    SQL> select * from table(dbms_xplan.display);
    PLAN_TABLE_OUTPUT
    Plan hash value: 1136995246
    | Id  | Operation            | Name    | Rows  | Bytes | Cost (%CPU)| Time     |
    |   0 | SELECT STATEMENT     |         |     1 |   467 |     1   (0)| 00:00:01 |
    |   1 |  NESTED LOOPS OUTER  |         |     1 |   467 |     1   (0)| 00:00:01 |
    |   2 |   NESTED LOOPS       |         |     1 |    26 |     1   (0)| 00:00:01 |
    |*  3 |    INDEX UNIQUE SCAN | OBJ_PK  |     1 |    13 |     1   (0)| 00:00:01 |
    |*  4 |    INDEX UNIQUE SCAN | ATTR_PK |     1 |    13 |     0   (0)| 00:00:01 |
    |   5 |   VIEW               |         |     1 |   441 |            |          |
    |*  6 |    FILTER            |         |       |       |            |          |
    |*  7 |     TABLE ACCESS FULL| LOC_TXT |     1 |   441 |     3   (0)| 00:00:01 |
    Predicate Information (identified by operation id):
       3 - access("OBJ"."ID"=225)
       4 - access("ATTR"."ID"=225)
       6 - filter(NULL IS NOT NULL)
       7 - filter("ATTR"."ID"="LT"."OBJECTID" AND "LT"."TYPEID"=851)
    Note
       - dynamic sampling used for this statement (level=4)
    26 rows selected.Note also that with the constraint in place, I did not get a row returned regardless of whether the outer join was to attr.id or obj.id
    Edited by: Dom Brooks on Aug 15, 2011 11:41 AM

  • Using outter joins

    need to create a report based on three tables: emp,dept, and loc. There dept can have null dept and loc and the user wants to see these records; therefore, we need to do an outter join. Also, the user wants to have bind variables so he/she can put any of these variables (dept or loc) and based on that return the records.
    select emp.name, dept.name, loc.name
    from emp, dept, loc
    where dept.deptno = emp.deptno(+)
    and loc.locid = emp.loc(+)
    and dept.deptno = :department
    and loc.locid = :location
    I need to find and join those records that are null. I took the following approach, but I'm not sure if this is correct:
    1. created a table based on emp and converted those null dept and loc w/ -1
    2. joined the tables
    3. do the query based on the table
    4. the bind variable will have a like so that if the user doesn't insert a field I will have the wild card (%) so it will bring all records
    select emp.name, dept.name, loc.name
    from emp, dept, loc, (select nvl(deptno, -1) as deptno, nvl(loc, -1) as loc from emp) temp
    where dept.deptno = emp.deptno(+)
    and loc.locid = emp.loc(+)
    and temp.deptno = nvl(dept.deptno, -1)
    and temp.loc = nvl(loc.id, -1)
    and temp.deptno like nvl(:department, '%')
    and temp.locid like nvl(:location, '%')
    I think that I'm overdoing this query though. Let me know!
    ;-P
    Marcelo

    Hi, since oracle 9i it is possible to use the ansi join syntax in Oracle sql.
    You can use a "full out join", "left outer join", "right outer join"
    Example return all rows with NULLs from all tables:
    select e.last_name, d.department_name, d.department_id, j.job_title, l.city
    from employees e
         full outer join departments d on (e.department_id=d.department_id )
         full outer join jobs j on (e.job_id=j.job_id)
         full outer join locations l on (l.location_id=d.location_id)
    see docu: http://download-west.oracle.com/docs/cd/B10501_01/server.920/a96540/statements_103a.htm#2107297
    Lutz

  • Full outer Join:ORA-01790

    Hi All,
    The issue may be silly, but we cant make it out:
        DB : Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - ProdWe are running the below query with no issues:
    select t1.text,t2.text text2,t1.line,decode(upper(t1.text),upper(t2.text),1,0) flg
    from
       (select text,row_number() over(order by line) line
        from user_source
       where name = 'COLL_MVIEW_REFRESH_PROC_LBK'
       and replace(trim(text),chr(10)) is not null
       ) t1,
       (select text ,row_number() over(order by line) line
        from user_source
        where name = 'COLL_MVIEW_REFRESH_PROC'
        and trim(replace(text,chr(10))) is not null) t2
    where t1.line = t2.lineBut when trying for an outer join it is giving error like
    ORA-01790: expression must have same datatype as corresponding expressionOuter Join Query:
    select t1.text,t2.text,t1.line,decode(upper(t1.text),upper(t2.text),1,0) flg
    from
       (select text,row_number() over(order by line) line
        from user_source
        where name = 'COLL_MVIEW_REFRESH_PROC_LBK'
        and replace(trim(text),chr(10)) is not null
        ) t1 full outer join
        (select text ,row_number() over(order by line) line
        from user_source
        where name = 'COLL_MVIEW_REFRESH_PROC'
        and trim(replace(text,chr(10))) is not null) t2
    on( t1.line = t2.line )Any idea what is wrong here?
    Thanks,
    Jeneesh

    Not sure what is wrong with your version. It might have to do with row_number not working on an empty row (outer joined).
    How about this alternative?
    The approach is a bit different, but it uses only one access to the user_source view.
    select s.lineNo, min(s.text1) text1, min(s.text2) text2, decode(upper(min(s.text1)), upper(min(s.text2)), 1, 0) flag
    from
    (select decode(u.name, 'COLL_MVIEW_REFRESH_PROC_LBK', u.text) text1
           ,decode(u.name, 'COLL_MVIEW_REFRESH_PROC'
    , u.text) text2
           ,u.name,
            row_number() over (partition by u.name order by u.line) lineNo
    from user_source u
    where u.name in ('COLL_MVIEW_REFRESH_PROC_LBK','COLL_MVIEW_REFRESH_PROC'
    /* and u.TYPE = 'PROCEDURE' */
    and replace(trim(u.text),chr(10)) is not null
    ) s
    group by s.lineNo
    order by s.lineNo;Edited by: Sven W. on Nov 18, 2008 5:24 PM

  • FULL OUTER JOIN In InfoSet

    Hi, all
    Is it possible to make FULL OUTER JOIN in BI InfoSet?
    If no, another question - is it possible to switch base InfoProvider? I have an InfoSet with InfoCube1 and DSO1 which I can outer join. I want to outer join InfoCube1 , not DSO1 that's why I need to switch them in the InfoSet.

    Hi,
       In BI 7.0 Infoset has given chance to include an Info cube also,maximum you can include 2 info Cubes only in a infoset.
    check the below link which helps you in understanding of the join conditions so that you can apply to your scenario.
    http://help.sap.com/saphelp_nw2004s/helpdata/en/f1/713c3b35703079e10000000a114084/content.htm
    http://help.sap.com/saphelp_nw2004s/helpdata/en/67/7e4b3eaf72561ee10000000a114084/content.htm
    Regards,
    Praveena.

  • Full outer join ---  bug? Urgent

    Hi,
    I have a simple mapping using 2 source tables and doing an full outer join. While executing the mapping it is throwing me out with an error --
    Starting Execution LOAD_SAP
    Starting Task LOAD_SAP
    ORA-01790: expression must have same datatype as corresponding expression
    ORA-02063: preceding line from ODSD@LOC_TGT_LOC_ODSD
    ORA-06512: at "DWH_USER.LOAD_SAP", line 12
    ORA-06512: at "DWH_USER.LOAD_SAP", line 481
    ORA-06512: at "DWH_USER.LOAD_SAP", line 795
    ORA-06512: at "DWH_USER.LOAD_SAP", line 1973
    ORA-06512: at line 1
    Completing Task LOAD_SAP
    Completing Execution LOAD_SAP
    The SQL generated at line 12 is -
    CURSOR "JOIN_c" IS
    SELECT
    /*+ DRIVING_SITE("CONNECTION_LOC_TGT_LOC_ODSD") */
    "CONNECTION_LOC_TGT_LOC_ODSD"."END_USER_CUST_ID" "END_USER_CUST_ID",
    "SERVICE_LOC_TGT_LOC_ODSD"."SERVICE_NAME" "SERVICE_NAME",
    "CONNECTION_LOC_TGT_LOC_ODSD"."CE_CLLI" "CE_CLLI",
    "CONNECTION_LOC_TGT_LOC_ODSD"."PE_CLLI" "PE_CLLI"
    FROM "ODS"."CONNECTION"@"ODSD"@"LOC_TGT_LOC_ODSD" "CONNECTION_LOC_TGT_LOC_ODSD"
    FULL OUTER JOIN "ODS"."SERVICE"@"ODSD"@"LOC_TGT_LOC_ODSD" "SERVICE_LOC_TGT_LOC_ODSD" ON ("CONNECTION_LOC_TGT_LOC_ODSD"."END_USER_CUST_ID" = "SERVICE_LOC_TGT_LOC_ODSD"."END_USER_CUST_ID") ;
    If I replace the Full outer join with an equi join everything works fine. The SQL generated with an equi-join is ---
    SELECT
    /*+ DRIVING_SITE("CONNECTION_LOC_TGT_LOC_ODSD") */
    "CONNECTION_LOC_TGT_LOC_ODSD"."END_USER_CUST_ID" "END_USER_CUST_ID",
    "SERVICE_LOC_TGT_LOC_ODSD"."SERVICE_NAME" "SERVICE_NAME",
    "CONNECTION_LOC_TGT_LOC_ODSD"."CE_CLLI" "CE_CLLI",
    "CONNECTION_LOC_TGT_LOC_ODSD"."PE_CLLI" "PE_CLLI"
    FROM "ODS"."CONNECTION"@"ODSD"@"LOC_TGT_LOC_ODSD" "CONNECTION_LOC_TGT_LOC_ODSD",
    "ODS"."SERVICE"@"ODSD"@"LOC_TGT_LOC_ODSD" "SERVICE_LOC_TGT_LOC_ODSD" WHERE ( "CONNECTION_LOC_TGT_LOC_ODSD"."END_USER_CUST_ID" = "SERVICE_LOC_TGT_LOC_ODSD"."END_USER_CUST_ID" );
    We are using Oracle 9.2.0.4 AND OWB Clinet 9.2.0.2.8 and runtime repository 9.2.0.2.0.
    Any help on this appreciated?

    The discussion on this thread has moved to the later thread Problem with JOINs
    Nikolai

  • Query with FULL OUTER JOIN , help pleaseeeeeeeeeeee...

    Hi everyone,
    I'm trying to write a query for a report in Oracle SQL, but i just can't figure out how to do it.
    I'm using Oracle 10g release 1.0 database and i execute my queris in SQL* PLUS ( eventually i'm gonna use them in Oracle Report Builder ) .
    here's what i have:
    i have four tables that are used for our inventory application. lets call them INCOMMING , INCOMMING_ITEMS , OUTGOING , OUTGOING_ITEMS.
    as you may have guessed , INCOMMING_ITEMS is the detail table for INCOMMING ( joined by IID column) and also OUTGOING_ITEMS is the detail table for OUTGOING ( joined by OID column ).
    here is the structure of them :
    INCOMMING
    IID varchar2
    CDATE date
    INCOMMING_ITEM
    IID varchar2
    PART_NO number
    QTY number
    OUTGOING
    OID varchar2
    CDATE date
    OUTGOING_ITEM
    OID varchar2
    PART_NO number
    QTY number
    now , the query i want, should return part_no , cdate , sum of OUTGOING qty , sum of INCOMMING qty .
    the result of the query should be sth like this :
    part_no     cdate     O_qty     I_qty
    100     01/05/06     10     0
    100     01/05/07     20     60
    200     01/06/02     0     50
    300     01/06/02     30     40
    this means that for some dates and for some parts, i may not have INCOMMING or OUTGOING data, but if at least one of the 2 last columns has a non-zero data, i should show the row ( like the first and third rows of my example result), and if both have data for the same PART_NO and the same CDATE, both should be showed in the same row. ( like the second row in my example result)
    i tried so much and came up with several huge and also time consuming queries, but then i read abt FULL OUTER JOIN somewhere and tried using that. here is what i came up with :
    SELECT
    PART_NO , CDATE , sum(II.QTY) I_QTY , SUM (OI.QTY) O_QTY
    FROM
         (OUTGOING O INNER JOIN OUTGOING_ITEM OI USING ( OID ) )
    FULL OUTER JOIN
         (INCOMMING I INNER JOIN INCOMMING_ITEM II USING ( IID ) )
    ON ( I.CDATE = O.CDATE AND II.PART_NO = OI.PART_NO)
    WHERE
    I.CDATE = :PARAMETER1
    AND O.CDATE = :PARAMETER1
    GROUP BY
    PART_NO , CDATE
    this query is short and fast , but the results r not what i expected. i mean, although i have used FULL OUTER JOIN in the query , but the results i get r sth like this :
    part_no     cdate     O_qty     I_qty
    100     01/05/07     20     60
    300     01/06/02     30     40
    which means only the rows that has both values are returned.
    any change i make to this query would make the SQL* PLUS hang , like when i use the cartesian product of two large tables, so i guess my changes wheren't in the right direction.
    i think its possible to write this query using FULL OUTER JOIN syntax, but i just can't find it.
    Can anybody pleaseeeeeeeeeeeee help me?
    thanx in advance,
    Maryam.

    Note: I wrote this on the fly -- hope there is no syntax errors, otherwise forgive me -- but you get the idea..
    select
    fromUnionAll.cdate, fromUnionAll.part_no,
    sum(fromUnionAll.O_qty) O_qty,
    sum(fromUnionAll.I_qty) I_qty
    from
    select
    iinner.cdate, iinner.part_no, 0 O_qty, iinner.I_qty
    from
    select
    i.cdate, ii.part_no,
    /* added the case only for the extreme case when there is
    no record anywhere for the given CDATE in INCOMMING_item */
    sum( ( case when ii.qty is not null then ii.qty else 0 end) ) I_qty
    from
    incomming i,
    incomming_item ii
    where
    i.iid = ii.iid (+)
    group by i.cdate, ii.part_no
    ) iinner
    union all
    select
    oinner.cdate, oinner.part_no, oinner.O_qty, 0 I_qty
    from
    select
    o.cdate, oi.part_no,
    /* added the case only for the extreme case when there is
    no record anywhere for the given CDATE in OUTGOING_item */
    sum( ( case when oi.qty is not null then oi.qty else 0 end) ) O_qty
    from
    outgoing o,
    outgoing_item oi
    where
    o.oid = oi.oid (+)
    group by o.cdate, oi.part_no
    ) oinner
    ) fromUnionAll
    group by fromUnionAll.cdate, fromUnionAll.part_no;
    --Samson                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       

  • How can I join/Full outer join two different columns instead of union all?

    Hi,
    I have a scenario as the following:
    I am performing set operations using obiee 11g where I want to take values from two different criteria. Howwver, I dont want union to take place, instead i want join to take place to see all the columns in the output.
    For that, I tried changing the sql in advanced tab and tried to put full outer join instead of union all but its not allowing me to change.
    How can I achieve it? please help.
    Thanks.

    Hi,
    My problem is that I am unable to modify the sql in advanced tab. Probably due to some security reason,it's restricting me to change.
    Can you suggest me a way to change it?
    Thanks..

  • Full outer join

    CREATE TABLE FEE_BANDS_AUD1
        AUDIT_DATE TIMESTAMP (6) NOT NULL ENABLE,
        AUDIT_ACTION          VARCHAR2(30 BYTE) NOT NULL ENABLE,
        AUDIT_USER            VARCHAR2(8 BYTE) NOT NULL ENABLE,
        FEE_BANDS_ID          NUMBER NOT NULL ENABLE,
        FEE_RULE              VARCHAR2(10 BYTE) NOT NULL ENABLE,
        FEE_BAND_LOWER_LIMIT  NUMBER(19,0),
        FEE_BAND_HIGHER_LIMIT NUMBER(19,0),
        RATE_PERCENT          NUMBER(11,4),
        RATE_NUMBER           NUMBER(21,2),
        CAL_BASED_ON          CHAR(1 BYTE) NOT NULL ENABLE,
        REC_SEQ               NUMBER(5,0) NOT NULL ENABLE)
        FEE_BANDS_AUD
    INSERT INTO FEE_BANDS_AUD1 VALUES('18-10-10 06:31:56.625000000 AM','CREATE','sdn',1,'NSK',0,9999999999999999999,11,0,'B',0);
    INSERT INTO FEE_BANDS_AUD1 VALUES('18-10-10 06:53:08.659000000 AM','UPDATE','sdn',1,'NSK',0,100,11,0,'B',1);
    INSERT INTO FEE_BANDS_AUD1 VALUES('18-10-10 06:53:08.659000000 AM','UPDATE','sdn',2,'NSK',101,9999999999999999999,1,0,'B',1);
    INSERT INTO FEE_BANDS_AUD1 VALUES('18-10-10 06:54:51.354000000 AM','UPDATE','sdn',1,'NSK',0,100,11,0,'B',2);
    INSERT INTO FEE_BANDS_AUD1 VALUES('18-10-10 06:54:51.354000000 AM','UPDATE','sdn',2,'NSK',101,9999999999999999999,33,0,'B',2);
    INSERT INTO FEE_BANDS_AUD1 VALUES('18-10-10 07:15:16.354000000 AM','UPDATE','sdn',1,'NSK',0,100,11,0,'B',3);
    INSERT INTO FEE_BANDS_AUD1 VALUES('18-10-10 07:15:16.354000000 AM','UPDATE','sdn',2,'NSK',101,200,33,0,'B',3);
    INSERT INTO FEE_BANDS_AUD1 VALUES('18-10-10 07:15:16.354000000 AM','UPDATE','sdn',3,'NSK',201,9999999999999999999,1,0,'B',3);
    INSERT INTO FEE_BANDS_AUD1 VALUES('18-10-10 07:15:53.341000000 AM','UPDATE','sdn',1,'NSK',0,100,11,0,'B',4);
    INSERT INTO FEE_BANDS_AUD1 VALUES('18-10-10 07:15:53.341000000 AM','UPDATE','sdn',2,'NSK',101,200,33,0,'B',4);
    INSERT INTO FEE_BANDS_AUD1 VALUES('18-10-10 07:15:53.341000000 AM','UPDATE','sdn',3,'NSK',201,9999999999999999999,2,0,'B',4);     
    INSERT INTO FEE_BANDS_AUD1 VALUES('18-10-10 07:18:52.118000000 AM','UPDATE','sdn',1,'NSK',0,100,11,0,'B',5);
    INSERT INTO FEE_BANDS_AUD1 VALUES('18-10-10 07:18:52.118000000 AM','UPDATE','sdn',2,'NSK',101,9999999999999999999,2,0,'B',5);     I have a bandId, in which i will update a new band or delete a band. Each time when i insert,update or delete rec_seq is incremented to one to identify the old set of bands and new set of bands.
    My problem here is when i deleted a band (which is last two insert statments from the above) those are not coming in the old values . It should come in the old value set and new value should come as null.
    I am using full outer join because when i create a new record there wont be any old values in this case old values should come as null and also i delete any values there wont be any new value for that so new should come as null
    This is the query im trying
    select
    O.REC_SEQ,O.audit_action,O.fee_bands_id, O.FEE_RULE,
    O.FEE_BAND_LOWER_LIMIT, O.FEE_BAND_HIGHER_LIMIT,O.CAL_BASED_ON,
    N.REC_SEQ,n.audit_action,n.fee_bands_id, N.FEE_RULE,
    N.FEE_BAND_LOWER_LIMIT, N.FEE_BAND_HIGHER_LIMIT,N.CAL_BASED_ON
    from fee_bands_aud1 O FULL OUTER JOIN fee_bands_aud1 N
    on (N.fee_bands_id = O.fee_bands_id
    and N.FEE_RULE = O.FEE_RULE
    and O.REC_SEQ = N.REC_SEQ-1)
    where N.FEE_RULE = 'NSK'
    order by N.REC_SEQ, n.fee_bands_idwhat is the problem anybody please help i am very new to oracle.

    Yes, it's possible.
    Search for "full outer join" in the online manuals
    http://tahiti.oracle.com/pls/db92/db92.drilldown?levelnum=2&toplevel=a96540&method=FULL&chapters=0&book=&wildcards=1&preference=&expand_all=&verb=&word=full+outer+join+#a96540
    In the SQL Reference you can find an example

  • Full outer join Bug or my misunderstanding?

    CREATE GLOBAL TEMPORARY TABLE BP_ATTRIBUTE_CHARVAL_GTT
       (     "ATTRIBUTE_ID" NUMBER(10,0),
         "PARTNER_ID" NUMBER(10,0),
         "CHAR_VALUE" VARCHAR2(4000 BYTE),
         "LAST_UPDATE_DATE" DATE,
         "DISABLE_DATE" DATE
       ) ON COMMIT DEETE ROWS ;
    CREATE  TABLE BP_ATTRIBUTE_CHARVAL
       (     "ATTRIBUTE_ID" NUMBER(10,0),
         "PARTNER_ID" NUMBER(10,0),
         "CHAR_VALUE" VARCHAR2(4000 BYTE),
         "LAST_UPDATE_DATE" DATE,
         "DISABLE_DATE" DATE
    REM INSERTING into BP_ATTRIBUTE_CHARVAL
    Insert into BP_ATTRIBUTE_CHARVAL (ATTRIBUTE_ID,PARTNER_ID,CHAR_VALUE,LAST_UPDATE_DATE,DISABLE_DATE) values (888854,710326,'1',to_date('29-NOV-06','DD-MON-RR'),to_date('01-JAN-06','DD-MON-RR'));
    Insert into BP_ATTRIBUTE_CHARVAL (ATTRIBUTE_ID,PARTNER_ID,CHAR_VALUE,LAST_UPDATE_DATE,DISABLE_DATE) values (591330,710326,'01',to_date('09-FEB-06','DD-MON-RR'),to_date('07-NOV-01','DD-MON-RR'));
    Insert into BP_ATTRIBUTE_CHARVAL (ATTRIBUTE_ID,PARTNER_ID,CHAR_VALUE,LAST_UPDATE_DATE,DISABLE_DATE) values (591321,710326,'N',to_date('09-FEB-06','DD-MON-RR'),to_date('07-NOV-01','DD-MON-RR'));
    Insert into BP_ATTRIBUTE_CHARVAL (ATTRIBUTE_ID,PARTNER_ID,CHAR_VALUE,LAST_UPDATE_DATE,DISABLE_DATE) values (591331,710326,'00',to_date('09-FEB-06','DD-MON-RR'),to_date('07-NOV-01','DD-MON-RR'));
    Insert into BP_ATTRIBUTE_CHARVAL (ATTRIBUTE_ID,PARTNER_ID,CHAR_VALUE,LAST_UPDATE_DATE,DISABLE_DATE) values (591329,710326,'01',to_date('09-FEB-06','DD-MON-RR'),to_date('07-NOV-01','DD-MON-RR'));
    Insert into BP_ATTRIBUTE_CHARVAL (ATTRIBUTE_ID,PARTNER_ID,CHAR_VALUE,LAST_UPDATE_DATE,DISABLE_DATE) values (591332,710326,'01',to_date('09-FEB-06','DD-MON-RR'),to_date('07-NOV-01','DD-MON-RR'));
    Insert into BP_ATTRIBUTE_CHARVAL (ATTRIBUTE_ID,PARTNER_ID,CHAR_VALUE,LAST_UPDATE_DATE,DISABLE_DATE) values (591324,710326,'2',to_date('09-FEB-06','DD-MON-RR'),to_date('07-NOV-01','DD-MON-RR'));
    Insert into BP_ATTRIBUTE_CHARVAL (ATTRIBUTE_ID,PARTNER_ID,CHAR_VALUE,LAST_UPDATE_DATE,DISABLE_DATE) values (591333,710326,'01',to_date('09-FEB-06','DD-MON-RR'),to_date('07-NOV-01','DD-MON-RR'));
    Insert into BP_ATTRIBUTE_CHARVAL (ATTRIBUTE_ID,PARTNER_ID,CHAR_VALUE,LAST_UPDATE_DATE,DISABLE_DATE) values (591323,710326,'X1',to_date('09-FEB-06','DD-MON-RR'),to_date('07-NOV-01','DD-MON-RR'));
    Insert into BP_ATTRIBUTE_CHARVAL (ATTRIBUTE_ID,PARTNER_ID,CHAR_VALUE,LAST_UPDATE_DATE,DISABLE_DATE) values (591334,710326,'BS',to_date('09-FEB-06','DD-MON-RR'),to_date('07-NOV-01','DD-MON-RR'));
    REM INSERTING into BP_ATTRIBUTE_CHARVAL_GTT
    Insert into BP_ATTRIBUTE_CHARVAL_GTT(ATTRIBUTE_ID,PARTNER_ID,CHAR_VALUE,LAST_UPDATE_DATE,DISABLE_DATE) values (591330,707408,'01',to_date('29-MAR-06','DD-MON-RR'),to_date('07-NOV-01','DD-MON-RR'));
    Insert into BP_ATTRIBUTE_CHARVAL_GTT(ATTRIBUTE_ID,PARTNER_ID,CHAR_VALUE,LAST_UPDATE_DATE,DISABLE_DATE) values (591321,707408,'N',to_date('23-JAN-06','DD-MON-RR'),to_date('07-NOV-01','DD-MON-RR'));
    Insert into BP_ATTRIBUTE_CHARVAL_GTT(ATTRIBUTE_ID,PARTNER_ID,CHAR_VALUE,LAST_UPDATE_DATE,DISABLE_DATE) values (591331,707408,'00',to_date('23-JAN-06','DD-MON-RR'),to_date('07-NOV-01','DD-MON-RR'));
    Insert into BP_ATTRIBUTE_CHARVAL_GTT(ATTRIBUTE_ID,PARTNER_ID,CHAR_VALUE,LAST_UPDATE_DATE,DISABLE_DATE) values (591329,707408,'01',to_date('23-JAN-06','DD-MON-RR'),to_date('07-NOV-01','DD-MON-RR'));
    Insert into BP_ATTRIBUTE_CHARVAL_GTT(ATTRIBUTE_ID,PARTNER_ID,CHAR_VALUE,LAST_UPDATE_DATE,DISABLE_DATE) values (591332,707408,'00',to_date('29-MAR-06','DD-MON-RR'),to_date('07-NOV-01','DD-MON-RR'));
    Insert into BP_ATTRIBUTE_CHARVAL_GTT(ATTRIBUTE_ID,PARTNER_ID,CHAR_VALUE,LAST_UPDATE_DATE,DISABLE_DATE) values (591324,707408,'2',to_date('29-MAR-06','DD-MON-RR'),to_date('07-NOV-01','DD-MON-RR'));
    Insert into BP_ATTRIBUTE_CHARVAL_GTT(ATTRIBUTE_ID,PARTNER_ID,CHAR_VALUE,LAST_UPDATE_DATE,DISABLE_DATE) values (591333,707408,'01',to_date('23-JAN-06','DD-MON-RR'),to_date('07-NOV-01','DD-MON-RR'));
    Insert into BP_ATTRIBUTE_CHARVAL_GTT(ATTRIBUTE_ID,PARTNER_ID,CHAR_VALUE,LAST_UPDATE_DATE,DISABLE_DATE) values (591323,707408,'X1',to_date('23-JAN-06','DD-MON-RR'),to_date('07-NOV-01','DD-MON-RR'));
    Insert into BP_ATTRIBUTE_CHARVAL_GTT(ATTRIBUTE_ID,PARTNER_ID,CHAR_VALUE,LAST_UPDATE_DATE,DISABLE_DATE) values (591334,707408,'BS',to_date('23-JAN-06','DD-MON-RR'),to_date('07-NOV-01','DD-MON-RR'));
    Insert into BP_ATTRIBUTE_CHARVAL_GTT(ATTRIBUTE_ID,PARTNER_ID,CHAR_VALUE,LAST_UPDATE_DATE,DISABLE_DATE) values (876570,707408,'01',to_date('29-MAR-06','DD-MON-RR'),to_date('07-NOV-01','DD-MON-RR'));
    Insert into BP_ATTRIBUTE_CHARVAL_GTT (ATTRIBUTE_ID,PARTNER_ID,CHAR_VALUE,LAST_UPDATE_DATE,DISABLE_DATE) values (876568,707408,'1234560003264801',to_date('29-MAR-06','DD-MON-RR'),to_date('07-NOV-01','DD-MON-RR'));
    Insert into BP_ATTRIBUTE_CHARVAL_GTT(ATTRIBUTE_ID,PARTNER_ID,CHAR_VALUE,LAST_UPDATE_DATE,DISABLE_DATE) values (876569,707408,'f3a1d996-720e-4e0a-989c-6d4f3e8e629a',to_date('29-MAR-06','DD-MON-RR'),to_date('07-NOV-01','DD-MON-RR'));
    Insert into BP_ATTRIBUTE_CHARVAL_GTT(ATTRIBUTE_ID,PARTNER_ID,CHAR_VALUE,LAST_UPDATE_DATE,DISABLE_DATE) values (874948,707408,'20060318000000',to_date('29-MAR-06','DD-MON-RR'),to_date('07-NOV-01','DD-MON-RR'));
    select 707408,    
           decode(g.attribute_id,NULL,c.attribute_id,g.attribute_id) attribute_id,
           case
           when c.last_update_date is null and g.last_update_date is not null
           then
              g.char_value
            when g.last_update_date is null and c.last_update_date is not null 
            then
              c.char_value
            when g.last_update_date >= c.last_update_date
            then
                 g.char_value
           else
                c.char_value
           end   char_value,        
           decode(g.last_update_date,c.last_update_date,g.last_update_date,c.last_update_date) last_update_date,
           decode(g.disable_date,c.disable_date,g.disable_date,c.disable_date) disable_date
    from bp_attribute_charval_gtt g
    full outer join
         bp_attribute_charval c
    on c.attribute_id = g.attribute_id    
    where c.partner_id=710326;Hi Guys
    When I run the above query I get a problem.
    I am expecting to see is a merge of all the attribute_id's and their values.
    The query does not appear to be merging the data as intended.
    My understanding of the full outer join is that its a combination of left and outer joins,
    so the above query is intended to return with the total number of unique attributes
    and their appropriate values
    a) I have a bug in the Sql
    b) This is an oracle bug
    c) My understanding is incorrect
    Please Help
    Message was edited by:
    Keith Jamieson (fixed insert statements for gtt )

    How do you expect a full outer join operation when you have given --
    where c.partner_id=710326;According to your supplied data - i don't think your query can perform that full outer join operation because of that filtration. Just remove that last condition and checked it. You will get your desired result - hopefully.
    "It's like you want to view the things by closing down your both eyes". Do you think it will pay?
    Regards.
    Satyaki De.

  • Using full outer join of subqueries named using with clause

    Hi,
    I am trying to create a view which is having 2 subqueries vol1 & vol2 with WITH clause. I am joining those 2 subqueries in the main query with FULL OUTER JOIN.
    When i compile that view in a tool like pl/sql developer, It has been compiled successfully.
    But when i call the view creation script from SQL command prompt, It is throwing error as
    from vol1 FULL JOIN vol2 o ON (vol1.ct_reference = vol2.ct_reference and vol1.table_name = vol2.table_name
    ERROR at line 29:
    ORA-00942: table or view does not exist
    Kindly advise whats going wrong.

    that's line 29. Maybe you get a better idea if you strip your operation of all the unneccessary elements until it works.
    There are some known bugs with subquery factoring (aka with clause) and also with ANSI join syntax, but it is hard to tell what happens here based on your description. But one thing is strange - if it is not a result of formatting (not formatting): I would expect the asterisk beneath the unknown table and not beneath the key word FULL.
    P.S.: my editor makes me think it's rather a proportional font thing. Have I already said that I don't like proportional font for SQL code examples?

  • Full outer join unexpected results

    Warning, long message - I've searched the forums and found nothing similar. I've cut out as much as possible. We have been given the following schema to work with:
    CREATE TABLE CALLS (
    TRUNKIN VARCHAR2 (10),
    TRUNKOUT VARCHAR2 (10),
    DURATION FLOAT)
    Here is some test data:
    insert into calls values(null, 'a', 3);
    insert into calls values(null, 'a', 2);
    insert into calls values('a', null, 1);
    insert into calls values(null, 'a', 0);
    insert into calls values(null, 'a', 0);
    insert into calls values(null, 'a', 7);
    insert into calls values(null, null, 0);
    This is horribly unnormalized, but basically this table represent phone calls. trunkin and trunkout represent the two ends, and duration is length of a call. While obviously every call has two ends, the nulls above represent ends we don't care about in this example.
    The goal is to end up with data that looks like this. In English, we want the in and out summary statistics for each trunk to be summarized into a single row. (Sorry, these are supposed to be columns, but they got wrapped, so I reposted them as rows):
    TRUNKIN a
    IN_CALLS_ATTEMPTED 1
    IN_CALLS_COMPLETED 1
    IN_AVERAGE_DURATION 1
    TRUNKOUT a
    OUT_CALLS_ATTEMPTED 5
    OUT_CALLS_COMPLETED 3
    OUT_AVERAGE_DURATION 4
    Indeed, with the data given above, these are the results returned with the query at the end of this message. However, when I changed the one non-null trunkin value to null, I got very strange results. First, I independently ran the two subqueries. The first of course returns no rows, the second returns 1 with the same out values above; this is exactly what I would expect. However, when I run the full query, I get **5** rows back, each with just the trunkout column set to "a" and **all** other columns set to null. This makes no sense to me. The 5 rows are obviously the 5 rows from the original data set where trunkout = "a", but I'm not full outer joining those; I'm full outer joining the result of the group by, which only has 1 row. But even given that I'm getting 5 rows back, shouldn't all five of those have the remaining out columns filled in with the values above?
    Here is the query:
    select
    from
    SELECT
    trunkin as trunk,
    COUNT(*) AS in_calls_attempted,
    SUM
    CASE
    WHEN duration > 0 THEN 1
    ELSE 0
    END
    ) AS in_calls_completed,
    SUM(duration)/
    SUM
    CASE
    WHEN duration > 0 THEN 1
    ELSE 0
    END
    ) AS in_average_duration
    FROM CALLS
    WHERE trunkin IS NOT NULL
    GROUP BY trunkin
    ) callsin
    full outer join
    SELECT
    trunkout as trunk,
    COUNT(*) AS out_calls_attempted,
    SUM
    CASE
    WHEN duration > 0 THEN 1
    ELSE 0
    END
    ) AS out_calls_completed,
    SUM(duration)/
    SUM
    CASE
    WHEN duration > 0 THEN 1
    ELSE 0
    END
    ) AS out_average_duration
    FROM CALLS
    WHERE trunkout IS NOT NULL
    GROUP BY trunkout
    ) callsout
    on callsin.trunk = callsout.trunk;

    I am not entirely sure why you are getting the results you are, but I strongly suspect that it is a result of outer joining on null columns. I would write the query as follows to avoid the outer join problem. The CASE statements in the outer query around the average duration calulations avoid the divide by zero error that would occur when some trunk has only in or out calls.
    SELECT trunk,SUM(in_calls_attempted) in_calls_attempted,
           SUM(in_calls_completed) in_calls_completed,
           CASE WHEN SUM(in_calls_completed) <> 0 THEN
                SUM(in_duration)/SUM(in_calls_completed)
                ELSE 0 END ave_in_duration,
           SUM(out_calls_attempted) out_calls_attempted,
           SUM(out_calls_completed) out_calls_completed,
           CASE WHEN SUM(out_calls_completed) <> 0 THEN
                SUM(out_duration)/SUM(out_calls_completed)
                ELSE 0 END ave_out_duration
    FROM (
       SELECT trunkin trunk,COUNT(*) in_calls_attempted,
              SUM(CASE WHEN duration > 0 THEN 1 ELSE 0 END) in_calls_completed,
              SUM(duration) in_duration,0 out_calls_attempted,
              0 out_calls_completed,0 out_duration
       FROM calls
       GROUP BY trunkin
       UNION ALL
       SELECT trunkout trunk,0 in_calls_attempted,0 in_calls_completed,
              0 in_duration,COUNT(*) out_calls_attempted,
              SUM(CASE WHEN duration > 0 THEN 1 ELSE 0 END) out_calls_completed,
              SUM(duration) out_duration
       FROM calls
       GROUP BY trunkout)
    GROUP BY trunkTTFN
    John

  • Help Required in full outer Join

    I feel the below query can be changed to full outer join. But, I've not been able to do so.
    I require your help in changing it to full outer join. My current query is
    SELECT CLAIMNO,'1' INDX FROM D_CLAIM@CMS2PROD
    WHERE clntsys=76500 and facility=76501 and filecreatedt='18-feb-2011' and fileupdatedt is null
    MINUS
    SELECT CLAIMNO,'1' FROM D_CLAIM
    WHERE clntsys=76500 and facility=76501 and filecreatedt='18-feb-2011' and fileupdatedt is null
    UNION
    SELECT CLAIMNO,'2' FROM D_CLAIM
    WHERE clntsys=76500 and facility=76501 and filecreatedt='18-feb-2011' and fileupdatedt is null
    MINUS
    SELECT CLAIMNO,'2' FROM D_CLAIM@cms2prod
    WHERE clntsys=76500 and facility=76501 and filecreatedt='18-feb-2011' and fileupdatedt is null

    donisback wrote:
    I feel the below query can be changed to full outer join. But, I've not been able to do so.
    I require your help in changing it to full outer join. My current query is
    SELECT CLAIMNO,'1' INDX FROM D_CLAIM@CMS2PROD
    WHERE clntsys=76500 and facility=76501 and filecreatedt='18-feb-2011' and fileupdatedt is null
    MINUS
    SELECT CLAIMNO,'1' FROM D_CLAIM
    WHERE clntsys=76500 and facility=76501 and filecreatedt='18-feb-2011' and fileupdatedt is null
    UNION
    SELECT CLAIMNO,'2' FROM D_CLAIM
    WHERE clntsys=76500 and facility=76501 and filecreatedt='18-feb-2011' and fileupdatedt is null
    MINUS
    SELECT CLAIMNO,'2' FROM D_CLAIM@cms2prod
    WHERE clntsys=76500 and facility=76501 and filecreatedt='18-feb-2011' and fileupdatedt is null
    I do not think that query is doing what you think that it is doing - on first inspection, it was not doing what I thought either due to the order in which the UNION and MINUS operators are performed. If the FILECREATEDT column is defined as a DATE, your query is relying on an implicit date conversion - in such a case, you should replace:
    filecreatedt='18-feb-2011'With:
    filecreatedt=TO_DATE('18-feb-2011','DD-MON-YYYY')Now, building a simple model to explain what is happening, we create two tables with 10 rows each. The first table has C1 values that increase by 2, while the second has C1 values that increase by 3:
    CREATE TABLE T1 AS
    SELECT
      ROWNUM*2 C1,
      TRUNC(SYSDATE)+ROWNUM*2 C2
    FROM
      DUAL
    CONNECT BY
      LEVEL<=10;
    CREATE TABLE T2 AS
    SELECT
      ROWNUM*3 C1,
      TRUNC(SYSDATE)+ROWNUM*3 C2
    FROM
      DUAL
    CONNECT BY
      LEVEL<=10;It appears that the intended result of your query is to obtain a distinct list of those rows that are in each table that are not in both tables - the UNION ALL minus the intersection of the rows in two tables. However, that is not what you are achieving with that query. To demonstrate, the two halves of your query:
    SELECT
      C1,
      C2
    FROM
      T1
    MINUS
    SELECT
      C1,
      C2
    FROM
      T2;
    C1 C2
    2 28-FEB-11
    4 02-MAR-11
    8 06-MAR-11
    10 08-MAR-11
    14 12-MAR-11
    16 14-MAR-11
    20 18-MAR-11
    SELECT
      C1,
      C2
    FROM
      T2
    MINUS
    SELECT
      C1,
      C2
    FROM
      T1;
    C1 C2
    3 01-MAR-11
    9 07-MAR-11
    15 13-MAR-11
    21 19-MAR-11
    24 22-MAR-11
    27 25-MAR-11
    30 28-MAR-11As can be seen by the above, each half returned 7 rows - there are 7 rows in each table that is not in the other table. Common sense would state that if we UNION these two results (assuming no duplicate values in each table), we would see 14 rows:
    SELECT
      C1,
      C2
    FROM
      T1
    MINUS
    SELECT
      C1,
      C2
    FROM
      T2
    UNION
    SELECT
      C1,
      C2
    FROM
      T2
    MINUS
    SELECT
      C1,
      C2
    FROM
      T1;
    C1 C2
    3 01-MAR-11
    9 07-MAR-11
    15 13-MAR-11
    21 19-MAR-11
    24 22-MAR-11
    27 25-MAR-11
    30 28-MAR-11Only 7 rows? Let's try again with the help of inline views to control the order in which the MINUS and UNION operators are processed:
    SELECT
    FROM
      (SELECT
        C1,
        C2
      FROM
        T1
      MINUS
      SELECT
        C1,
        C2
      FROM
        T2)
    UNION
    SELECT
    FROM
      (SELECT
        C1,
        C2
      FROM
        T2
      MINUS
      SELECT
        C1,
        C2
      FROM
        T1);
    C1 C2
    2 28-FEB-11
    3 01-MAR-11
    4 02-MAR-11
    8 06-MAR-11
    9 07-MAR-11
    10 08-MAR-11
    14 12-MAR-11
    15 13-MAR-11
    16 14-MAR-11
    20 18-MAR-11
    21 19-MAR-11
    24 22-MAR-11
    27 25-MAR-11
    30 28-MAR-11Note that the above returned 14 rows. We can do the same using just two outer joins:
    SELECT
      T1.C1,
      T1.C2
    FROM
      T1,
      T2
    WHERE
      T1.C1=T2.C1(+)
      AND T2.C1 IS NULL
    UNION
    SELECT
      T2.C1,
      T2.C2
    FROM
      T1,
      T2
    WHERE
      T2.C1=T1.C1(+)
      AND T1.C1 IS NULL;
    C1 C2
    2 28-FEB-11
    3 01-MAR-11
    4 02-MAR-11
    8 06-MAR-11
    9 07-MAR-11
    10 08-MAR-11
    14 12-MAR-11
    15 13-MAR-11
    16 14-MAR-11
    20 18-MAR-11
    21 19-MAR-11
    24 22-MAR-11
    27 25-MAR-11
    30 28-MAR-11Or we can do it with a full outer join and a MINUS operator:
    SELECT
      NVL(T1.C1,T2.C1) C1,
      NVL2(T1.C1,T1.C2,T2.C2) C2
    FROM
      T1 FULL OUTER JOIN T2
        ON T1.C1=T2.C1
    MINUS
    SELECT
      T1.C1,
      T1.C2
    FROM
      T1,
      T2
    WHERE
      T1.C1=T2.C1;
    C1 C2
    2 28-FEB-11
    3 01-MAR-11
    4 02-MAR-11
    8 06-MAR-11
    9 07-MAR-11
    10 08-MAR-11
    14 12-MAR-11
    15 13-MAR-11
    16 14-MAR-11
    20 18-MAR-11
    21 19-MAR-11
    24 22-MAR-11
    27 25-MAR-11
    30 28-MAR-11Or just with a full outer join with a WHERE clause:
    SELECT
      NVL(T1.C1,T2.C1) C1,
      NVL2(T1.C1,T1.C2,T2.C2) C2
    FROM
      T1 FULL OUTER JOIN T2
        ON T1.C1=T2.C1
    WHERE
      (T1.C1 IS NULL
        OR T2.C1 IS NULL);
    C1 C2
    3 01-MAR-11
    9 07-MAR-11
    15 13-MAR-11
    21 19-MAR-11
    24 22-MAR-11
    27 25-MAR-11
    30 28-MAR-11
    8 06-MAR-11
    20 18-MAR-11
    2 28-FEB-11
    10 08-MAR-11
    4 02-MAR-11
    14 12-MAR-11
    16 14-MAR-11With the above knowledge, you should be able to fix your SQL statement to produce the expected results.
    Charles Hooper
    Co-author of "Expert Oracle Practices: Oracle Database Administration from the Oak Table"
    http://hoopercharles.wordpress.com/
    IT Manager/Oracle DBA
    K&M Machine-Fabricating, Inc.

  • Join-types right & full outer join with Datasets

    Hello
    I use Crystal Reports XI Release 2 with ADO.NET Datasets as datasource. In the "Database-Expert" I try to set the "Link-Options". Unfortunately are the join-types "right outer join" and "full outer join" disabled.
    - Is this because of the datasource Dataset?
    - Is there e possibility to build the Dataset so I can use this two joins?
    - If not, is it possible in a newer version?
    Thanks, T.Fitzi

    Hi
    I think this is the problem. I don't connect directly to a database. My application (C#) provieds Crystal Report with a dataset. So all my data is in this dataset.
    Are this joins in the new version stil disabled?
    Regards, Thomas

  • Full outer join query giving error

    Hi I have written the below query to get the fields below as an out put but am getting the error missing keyword..am not understanding where did i missed..i have done step by step query analysis..but could not find the error.
    Please help me in resolving the issue.
    Expected output Columns :*
    COUNTRY , TRN_TYPE ,SKU ,BIX_Customer ,PERIOD ,CURRENTSTOCK ,STOCK_VALUE ,SALES ,SALES_VALUE ,TARGET
    Query :_
    select (case when a.country is null then b.country when b.country is null then c.country else a.country end) AS COUNTRY,
    (case when a.Sale_Type is null then b.Stk_type when b.stk_type is null then c.Stk_type else a.Sale_Type end) AS TRN_TYPE,
    (case when a.sku is null then b.sku when b.sku is null then c.sku else a.sku end) AS SKU,
    (case when a.bix_customer is null then b.bix_customer_code when b.bix_customer_code is null then c.bix_customer_code else a.bix_customer end)AS BIX_Customer ,
    (case when a.period is null then TO_number(b.period) when b.period is null then TO_NUMBER(c.period) else a.period end) AS PERIOD,
    nvl(b.CURRENTSTOCK,0) AS CURRENTSTOCK,
    nvl(b.stock_value,0) AS STOCK_VALUE,
    nvl(a.sales,0) AS SALES,
    nvl(a.SALES_VALUE,0) AS SALES_VALUE,
    nvl(c.TARGET_QTY,0) AS TARGET
    from
    (select UPPER(c.cust_country_name) AS COUNTRY,
    DECODE(ds.account_key,7156,'SAMPLE',7157,'BONUS',7485,'SALE') AS Sale_Type,
    substr(i.item_code,7) AS SKU,
    c.bix_customer_code AS BIX_Customer,
    ds.descr as descr ,
    ds.period as period,
    sum(ds.quantity) AS SALES,
    sum(case when ds.local_value is null then ds.euro_value else ds.local_value END) AS SALES_VALUE
    FROM distributor_sales ds, customer c, item i
    where ds.customer_key=c.customer_key
    and ds.item_key= i.item_key
    group by ds.period,
    ds.account_key,
    c.cust_country_name,
    substr(i.item_code,7),
    c.bix_customer_code,
    ds.descr) a
    full outer join
    (SELECT UPPER(b.cust_country_name) AS COUNTRY,
    DECODE(s.stock_type,'SALE','SALE','SALES','SALE','BONUS','BONUS','SAMPLE','SAMPLE') AS Stk_type,
    substr(c.item_code,7) AS SKU,
    s.descr as descr,
    s.period as period,
    b.bix_customer_code,
    sum(s.CLOSING_STOCK) CURRENTSTOCK,
    sum(s.closing_stock*s.cif_price) STOCK_VALUE
    FROM STOCK s, customer b, item c
    WHERE s.customer_key=b.customer_key
    and s.item_key= c.item_key
    group by
    s.descr,
    s.stock_type,
    s.period, b.bix_customer_code,b.cust_country_name,substr(c.item_code,7) ) b
    full outer join
    (SELECT UPPER(cu.cust_country_name) AS COUNTRY,
    DECODE(t.description,'SALES TARGET','SALE') AS Stk_type,
    substr(it.item_code,7) AS SKU,
    t.channel as channel,
    t.period as period,
    cu.bix_customer_code as bix_customer_code,
    sum(t.quantity) TARGET_QTY
    FROM sales_target t, customer cu, item it
    WHERE t.customer_key=cu.customer_key
    and t.item_key= it.item_key
    group by
    t.channel,
    t.description,
    t.period, cu.bix_customer_code,cu.cust_country_name,substr(it.item_code,7) ) c
    on a.SKU=b.SKU
    and a.sku=c.SKU
    and b.sku=c.SKU
    and a.BIX_Customer=b.bix_customer_code
    and a.BIX_Customer=c.bix_customer_code
    and b.bix_customer_code=c.bix_customer_code
    and a.Sale_Type=b.Stk_type
    and a.Sale_Type=c.Stk_type
    and b.Stk_type=c.Stk_type
    and a.descr=b.descr
    and b.descr=c.channel
    and a.descr=c.channel
    and a.country=b.country
    and a.country=c.COUNTRY
    and b.country=c.COUNTRY
    and a.period=b.period
    and a.period=c.period
    and b.period=c.period;

    <tt>Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production</tt>
    You must be aware that you must cascade full outer joins
    with
    t1 as
    (select 1 key,1.1 data from dual union all
    select 3,1.3 from dual union all
    select 6,1.6 from dual union all
    select 7,1.7 from dual
    t2 as
    (select 2 key,2.2 data from dual union all
    select 3,2.3 from dual union all
    select 4,2.4 from dual union all
    select 6,2.6 from dual
    t3 as
    (select 4 key,3.4 data from dual union all
    select 5,3.5 from dual union all
    select 6,3.6 from dual union all
    select 7,3.7 from dual
    select nvl(x.key,t3.key) key,
           x.data_1,
           x.data_2,
           t3.data data_3
      from (select nvl(t1.key,t2.key) key,
                   t1.data data_1,
                   t2.data data_2
              from t1
                   full outer join
                   t2
                on t1.key = t2.key
           ) x
           full outer join
           t3
        on t3.key = x.key
    order by keyunless you can live with duplicate key rows you cannot avoid whenever all table pairs contain common keys (try the below using data from above)
    select coalesce(t1.key,t2.key,t3.key) key,
           t1.data data_1,
           t2.data data_2,
           t3.data data_3
      from t1
           full outer join
           t2
        on t1.key = t2.key
           full outer join
           t3
        on t3.key = t1.key
       and t3.key = t2.key
    order by key
    select coalesce(t1.key,t2.key,t3.key) key,
           t1.data data_1,
           t2.data data_2,
           t3.data data_3
      from t2
           full outer join
           t3
        on t2.key = t3.key
           full outer join
           t1
        on t1.key = t2.key
       and t1.key = t3.key
    order by key
    select coalesce(t1.key,t2.key,t3.key) key,
           t1.data data_1,
           t2.data data_2,
           t3.data data_3
      from t1
           full outer join
           t3
        on t1.key = t3.key
           full outer join
           t2
        on t2.key = t1.key
       and t2.key = t3.key
    order by keyRegards
    Etbin
    Edited by: Etbin on 10.4.2013 9:53
    If you're after
    select *
      from (select *
              from (select *
                      from t1
                   ) a
                   full outer join
                   (select *
                      from t2
                   ) b
                on t1.key = t2.key
           ) x
           full outer join
           t3
        on t3.key = x.key
    order by keyyou're presently at
    select *
      from (
                   (select *
                      from t1
                   ) a
                   full outer join
                   (select *
                      from t2
                   ) b
                on t1.key = t2.key
           ) x
           full outer join
           t3
        on t3.key = x.key
    order by keyORA-00933: SQL command not properly ended

Maybe you are looking for

  • Error while configuring application server in Jdev 11g

    Hi all, I am trying make connection to application server in Jdev 11g. While testing the connection i am facing the below error. Testing JSR-160 Runtime ... failed. Cannot establish connection. Testing JSR-160 DomainRuntime ... skipped. Testing JSR-8

  • Use variable in SQL for column name

    Hi All, We want to use a user input as a column name in APEX. For e.g user will enter "ALLOWABLE_AMOUNT" then the query will be as follows  : select Rule,rule_name,rule_desc,"User Input" from rule_dim where "User_input" > 100 So here the User_input w

  • My boss wants to buy Adobe Acrobat X (or XI) standard package. What features does it have?

    Hello All, My boss has asked me to do some research into the Adobe Acrobat X (or XI) standard version. Can you please help me on the following issues: If we are to purchase the Adobe Acrobat X (or XI) standard version, will I be able to edit PDF docu

  • Portal Access without configuring the Hosts file

    Hello experts, Is possible to access the SAP Portal By mentioning the IP address in the URL without configuring the Hosts file? Please suggest me. Thanks.

  • Playlist Deleted when edited

    I have 2 playlists that are now not showing up on my phone...  in both cases, it happened when I added a some new songs to the playlist on my computer.  In other words, whenever I changed the playlist, it disappeared from my phone...  I have updated