Joins, Select or Union of unrelated tables

I have about 7 tables that have data that I need to get in a
report but the columns in those tables are unrelated which makes
it a little difficult to do a leading-trailing table select ie
a.xxx,b.yyy
where a.xxx=b.yyy
I am trying to get various columns from the tables together to
generate a report. Is there a better way to do that. Unions puts
all under one column but I need to have then in seperate columns
eg name,address,DOB,phone#. name is in a different table same
with the other fields and there is nothing in any of the tables
that are related put when I pull the various columns together it
will make a meaningful output.
Also
XXX_1099_AAAAAA
XXX_1199_AAAAAA
YYY_1299_BBBBBB
YYY_0100_BBBBBB
SSS_0200_CCCCCC
SSS_0300_AAAAAA
TTT_0400_BBBBBB
I have a column in the above format, and the column info is data
that I need to load another table. I need to get the last 6
xters as products and load them into a product column of another
table. I need to use them in a table. I did substr(column,10,6)
as
PRODUCTS but that didn't work and also I have more than 500,000
rows and will
be impossible to list then all one by one. I have multiple
entries for
different products and different months and for XXX and YYY. I
need a way to be
able to get those last 6 characters into a table.
I will need to end up with a table like
PRODUCTS
AAAAA
AAAAA
BBBBB
CCCCC so I can them match them again to the various columns from
where they were created to get that data to do sums for output.

In response to your first question, if the columns are completely unrelated, how do you know which row of data in the different tables goes with the rows in the others? If there is nothing to indicate which name goes with which address, then you can't join them.
In response to your second question, why did substr(column,10,6) not work? It looks like it should, unless there are a variable number of characters in front of the six you need, in which case you could do either ...
substr(column,length(column)-5,6) to get the last six, or ...
substr(column,instr(column,'_',2)+1,6) to get the six characters after the second underscore.

Similar Messages

  • Joining two unrelated tables

    Hi i posted this in the SQL * Forum as well and realised it was in the wrong place,
    I'm trying to run a query on 2 unrelated tables
    i) sdevmove_completed
    ii) sdevfailure_occurred
    sdevmove_completed holds the data of successful moves completed by a device and sdevfailure_occurred holds the data for failures that occurred when a move was issued.
    both tables have a common field Device_ID but are not related in a pkey/fkey manner (with each other).
    this is the SQL i tried
    select unique
    mvSu.id as "suc.Dev_ID",
    mvSu.source_location as "suc.Src_Loc" ,
    mvSu.destination_location as "suc.Dest_Loc" ,
    mvSu.timestampdb as "suc.Time" ,
    mvSu.equipment_type as "suc.Eq_Type" ,
    mvFa.timestampdb as "fail.Time" ,
    mvFa.failure_id as "fail.Alarm_ID" ,
    mvFa.failure_description as "fail.Alarm_Desc" ,
    mvFa.id as "fail.Dev_ID"
    from sdevfailure_occurred mvFa, sdevmove_successful mvSu
    where mvSu.timestampdb >= to_date('03-sep-03 00:00:00','dd:mon:yy hh24:mi:ss')
    and mvSu.timestampdb <= to_date('10-sep-03 15:30:00','dd:mon:yy hh24:mi:ss')
    and mvFa.timestampdb >= to_date('03-sep-03 00:00:00','dd:mon:yy hh24:mi:ss')
    and mvFa.timestampdb <= to_date('10-sep-03 15:30:00','dd:mon:yy hh24:mi:ss')
    and mvSu.id (+) = mvFa.id
    and mvSu.id='BLAX0200'
    The above query returns an extremely large amout of data as a result of the join. Eg. moves between the time specified is 100 (may return 1000 or more - this is dynamic) and failures between time specified is 100 (same as moves).
    Resultant, the above query returns 100 * 100 = 10000 (the actual data size is generally no less than 900,000 rows with the query i'm using).
    Is there anyway i can create a join such that only 200 rows get returned (assuming the above example),i.e. 100 rows with move_successful data and 100 rows with failure_occurred data
    Any help would be greatly appreciated.
    thanks in advance
    Prem

    Prem,
    The tables both contain more than 1 row per id (multiple timestamps). You can join on ID, but that will still do a carthesian product between all the dates within a particular ID. That is correct behaviour. If you have no other joining field, you basically want to see arbitrary matched data. In that case you might want to try this:
    select unique
    mvSu.id as "suc.Dev_ID",
    mvSu.source_location as "suc.Src_Loc" ,
    mvSu.destination_location as "suc.Dest_Loc" ,
    mvSu.timestampdb as "suc.Time" ,
    mvSu.equipment_type as "suc.Eq_Type" ,
    mvFa.timestampdb as "fail.Time" ,
    mvFa.failure_id as "fail.Alarm_ID" ,
    mvFa.failure_description as "fail.Alarm_Desc" ,
    mvFa.id as "fail.Dev_ID"
    from
      (select rownum rn, sdevfailure_occurred.* from sdevfailure_occurred) mvFa,
      (select rownum rn, sdevmove_successful.* from sdevmove_successful) mvSu
    where mvSu.timestampdb >= to_date('03-sep-03 00:00:00','dd:mon:yy hh24:mi:ss')
    and mvSu.timestampdb <= to_date('10-sep-03 15:30:00','dd:mon:yy hh24:mi:ss')
    and mvFa.timestampdb >= to_date('03-sep-03 00:00:00','dd:mon:yy hh24:mi:ss')
    and mvFa.timestampdb <= to_date('10-sep-03 15:30:00','dd:mon:yy hh24:mi:ss')
    and mvSu.id (+) = mvFa.id
    and mvSu.rn (+) = mvFa.rn -- table with the least records per id should come first, if this is not always the case you will loose data from mvFa!
    and mvSu.id='BLAX0200'Hope this helps,
    Lennert

  • Dynamic table name in an inner join - select statement

    Hi,
    Please can you let me know if is possible to use a Dynamic table name in an inner join?
    Something like the statement below? (It works in a simple select statement but not in an inner join)
    SELECT  *
         INTO CORRESPONDING FIELDS OF <t_itab>
          FROM <Dynamic table name> INNER JOIN pa0050 ON
          ( <Dynamic table name>pernr =  pa0050pernr )
           WHERE <Dynamic table name>~pernr = it_pernr-l_pernr
           AND pa0050~bdegr = f_bdegr.
    Any help would be apprecited very much.
    Thanks & Regards.

    Hi,
    Check this link.
    [http://help.sap.com/saphelp_nw04/helpdata/en/fc/eb39c4358411d1829f0000e829fbfe/frameset.htm]
    [Re: accessing dynamic internal table's fields??;
    hope it'll help u.
    Regards,
    Sneha.
    Edited by: sneha kumari on Jun 18, 2009 1:57 PM

  • Inner join-select -primary key in table issue

    Hi ,
            Iam using FEBKO(header) and FEBEP(item) in inner join  select .But the datas fetching by this selct in not correct.The analysis is the is no common primary fields in the both table.
    Question 1-> Can i use inner join without common primary key in the both tables, weather it possible to make a select without common primary key in both table. Please kindly let me know.
    Question 2-> What is the other possible way to give the selct for both table(better performance)
    Regards,
    Veera

    Hi,
    When you use INNER JOIN in this case, link your tables based on KUKEY and ESNUM fields, bcoz there can be many items under a single header. So this will work for you, even from the performance point of view.
    Hope this is helpful to you. If you need further information, revert back.
    Reward all the helpful answers.
    Regards
    Nagaraj T

  • Cannot select ROWID from a join view without a key-preserved table at OCI c

    Hi All,
    Can anybody help me..?
    When i am creating the request in the presentation services ..
    for some of the columns i am getting the following error..by removing those those columns it's working fine..
    Error Codes: OPR4ONWY:U9IM8TAC:OI2DL65P
    State: HY000. Code: 10058. [NQODBC] [SQL_STATE: HY000] [nQSError: 10058] A general error has occurred. [nQSError: 17001] Oracle Error code: 1445, message: ORA-01445: cannot select ROWID from a join view without a key-preserved table at OCI call OCIStmtExecute. [nQSError: 17010] SQL statement preparation failed. (HY000)
    Please suggest me a solution..
    Thanks in Advance...

    Looks like you have a view that contains the ROWID of another table. Does the view work first from sqlplus? See whether it returns any data. Its a ORA- specific error. So, the error is related to your view rather than BI EE. Also, how many columns are you trying to pull in your report?
    Thanks,
    Venkat
    http://oraclebizint.wordpress.com

  • To Select the data from two table one is transp table and onther is cluster

    Hi All,
    I want to select the data from two tables
    Here i am giving with an example.
    Fileds: kunnr belnr from bseg.  table bseg
    fields: adrnr from kna1     table: kna1.
    Know i want to put these into one internal table based on kunnr and belnr.
    Thanks in advance.
    Ramesh

    Hi,
       U cant use joins on cluster table and BSEG is a cluster table so use FOR  ALL ENTRIES for taht
    refer this code
    *&      Form  sub_read_bsak
          text
    -->  p1        text
    <--  p2        text
    FORM sub_read_bsak.
    *--Select data from BSAK Table
      SELECT lifnr
             augdt
             augbl
             gjahr
             belnr
             xblnr
             blart
             dmbtr
             mwskz
             mwsts
             sgtxt
             FROM bsak
             INTO CORRESPONDING FIELDS OF TABLE it_bsak
             WHERE belnr IN s_belnr
             AND   augdt IN s_augdt.
      IF sy-subrc EQ 0.
    *--Sort table by accounting document and vendor number
        SORT it_bsak BY belnr lifnr.
      ENDIF.
    ENDFORM.                    " sub_read_bsak
    *&      Form  sub_read_bseg
          text
    -->  p1        text
    <--  p2        text
    FORM sub_read_bseg.
      IF NOT it_bsak[] IS INITIAL.
    *--Select data from BSEG table
        SELECT belnr
               gjahr
               shkzg
               kostl
               hkont
               ebeln
               ebelp
               FROM bseg
               INTO CORRESPONDING FIELDS OF TABLE it_bseg
               FOR ALL ENTRIES IN it_bsak
               WHERE belnr EQ it_bsak-belnr
               AND   gjahr EQ it_bsak-gjahr
               AND   shkzg EQ 'S'.
        IF sy-subrc EQ 0.
    *--Sort table by accounting document
          SORT it_bseg BY belnr.
        ENDIF.
      ENDIF.
    ENDFORM.                    " sub_read_bseg

  • Creating a collection from a list and joining the list to a database table

    I would like to have opinions on good ways to process rows, based on a provided list of key values, joining the collected list against a source table to retrieve additional information related to the key. In this simple example, the procedure accepts a list of employee numbers. The goal is to print a list of names associated with those numbers. The method is to materialize the list of employee numbers as rows and join those rows to a source table to get the names. I have used BULK COLLECT. I don't know if this is a good approach and I would value suggestions. I would also like to understand why we cannot cast PLSQL tables using a type defined in the procedure's specification (why the type needs to exist as an object before we can cast it, like this:
    SELECT * FROM TABLE ( CAST ( SOME_FUNCTION(&some parameter) AS SOME_TYPE ) );
    Anyway, here is my demo SQL, which you should be able to execute against the SCOTT schema without any changes. Thanks for your help!
    declare
    type employee_numbers is table of emp.empno%type index by binary_integer;
    type employee_names is table of emp.ename%type index by binary_integer;
    type employees_record is record (empno employee_numbers, person_name employee_names);
    records employees_record;
    employees_cursor sys_refcursor;
    employee_number_list varchar2(30) default '7369,7499,7521';
    begin
    open employees_cursor for
    with t as (
    select regexp_substr(employee_number_list, '[^,]+', 1, level) as employee_number
    from dual
    connect by regexp_substr(employee_number_list, '[^,]+', 1, level) is not null
    ) select emp.empno, emp.ename
    from t join emp on (emp.empno = t.employee_number)
    order by 2
    fetch employees_cursor bulk collect into records.empno, records.person_name;
    dbms_output.put_line('number of records: '||records.empno.count());
    for i in 1 .. records.empno.count
    loop
    dbms_output.put_line(chr(39)||records.empno(i)||chr(39)||','||chr(39)||records.person_name(i)||chr(39));
    end loop;
    end;

    >
    It looks like I have confirmation that BULK COLLECT is a good way to go collect rows for processing
    >
    Well maybe and maybe not. Bear in mind that those demos were only basic demos for the purpose of illustrating how functionality CAN be used. They do not tell you WHEN to use them.
    BULK COLLECT uses expensive PGA memory and unless you know that only a small number of rows will be collected you can have some serious memory issues. Any heavy duty use of BULK COLLECT should generally have a LIMIT clause to limit the number of elements in the collection for each loop iteration.
    Always use SQL if possible.
    Also, for your use case you might be bette served using a PIPELINED function. Instead of collecting ALL rows into a nested table as in your example a PIPELINED function returns one row at a time but is still used as if it were a table using the same TABLE operator.
    Here is simple example code for a PIPELINED function
    -- type to match emp record
    create or replace type emp_scalar_type as object
      (EMPNO NUMBER(4) ,
       ENAME VARCHAR2(10),
       JOB VARCHAR2(9),
       MGR NUMBER(4),
       HIREDATE DATE,
       SAL NUMBER(7, 2),
       COMM NUMBER(7, 2),
       DEPTNO NUMBER(2)
    -- table of emp records
    create or replace type emp_table_type as table of emp_scalar_type
    -- pipelined function
    create or replace function get_emp( p_deptno in number )
      return emp_table_type
      PIPELINED
      as
       TYPE EmpCurTyp IS REF CURSOR RETURN emp%ROWTYPE;
        emp_cv EmpCurTyp;
        l_rec  emp%rowtype;
      begin
        open emp_cv for select * from emp where deptno = p_deptno;
        loop
          fetch emp_cv into l_rec;
          exit when (emp_cv%notfound);
          pipe row( emp_scalar_type( l_rec.empno, LOWER(l_rec.ename),
              l_rec.job, l_rec.mgr, l_rec.hiredate, l_rec.sal, l_rec.comm, l_rec.deptno ) );
        end loop;
        return;
      end;
    select * from table(get_emp(20))

  • ORA-01417: a table may be outer joined to at most one other table

    Hi All,
    I want to display the data even if there is no corresposding data in the fac_pos table.
    when using outer joins getting error message.
    Any work around for this ? Please suggest. :-)
    SQL> SELECT case when flen.FPID is not null then
      2        'do the calculations here'
      3        else
      4        'no value in the FAC_POS table so do the ELSE PART'
      5       end CASE ,
      6       mtf.EXT_FID
      7          FROM
      8       D_F_MAP  MTF,
      9             FAC   EFAC,
    10             TRADING       EST,
    11             FAC_POS         FLEN,
    12             USERS_MAP custmap
    13       WHERE mtf.SRC_FID  = efac.FID (+)
    14         AND mtf.SRC_DID  = efac.DID  (+)
    15         AND efac.TFID = est.TFID 
    16         AND mtf.EXT_FID (+) = flen.FID              
    17         AND mtf.EXT_DID (+)  = flen.DID 
    18      AND custmap.SRC_CUST_ID   =  est.SID  (+)     
    19         AND custmap.EXT_CUST_ID  =  flen.CUSTID (+)
    20      and est.TFID =14;
    no rows selected
    SQL> SELECT case when flen.FPID is not null then
      2        'do the calculations here'
      3        else
      4          'no value in the FAC_POS table so do the ELSE PART'
      5       end CASE ,
      6       flen.CUSTID FROM TRADING EST, USERS_MAP,FAC_POS FLEN,FAC EFAC, D_F_MAP  MTF
      7  WHERE
      8   EST.SID = USERS_MAP.SRC_CUST_ID        (+) AND
      9   USERS_MAP.EXT_CUST_ID   =  flen.CUSTID (+) AND
    10   MTF.SRC_DID (+) = EFAC.DID         AND
    11   MTF.SRC_FID (+) = EFAC.FID        AND
    12   efac.TFID = est.TFID         AND
    13   mtf.EXT_FID (+) = flen.FID                 AND         
    14   mtf.EXT_DID (+)  = flen.DID     AND
    15   est.TFID =14
    16  /
    MTF.SRC_FID (+) = EFAC.FID        AND
    ERROR at line 11:
    ORA-01417: a table may be outer joined to at most one other table
    create table D_F_MAP
      SOURCE  VARCHAR2(10) not null,
      SRC_DID VARCHAR2(8) not null,
      SRC_FID VARCHAR2(10) not null,
      EXT_DID VARCHAR2(20),
      EXT_FID VARCHAR2(20)
    create table FAC
      TFID  NUMBER,
      SRC   VARCHAR2(10),
      DID   NUMBER,
      FID   NUMBER,
      CSAMT NUMBER
    create table FAC_POS
      FPID   NUMBER,
      CUSTID NUMBER,
      SRC    VARCHAR2(10),
      DID    NUMBER,
      FID    NUMBER,
      SPOS   NUMBER
    create table PASS_OVER
      TFID VARCHAR2(20) not null,
      FLG  VARCHAR2(1)
    create table TRADING
      TFID  NUMBER not null,
      SRC   VARCHAR2(10),
      TDATE DATE,
      BID   NUMBER,
      SID   NUMBER
    create table USERS_MAP
      SRC_CUST_ID VARCHAR2(8) not null,
      EXT_CUST_ID VARCHAR2(20),
      SRC         VARCHAR2(10) not null
    insert into D_F_MAP (SOURCE, SRC_DID, SRC_FID, EXT_DID, EXT_FID)
    values ('KP', '854', '7754', '101', '1202');
    insert into D_F_MAP (SOURCE, SRC_DID, SRC_FID, EXT_DID, EXT_FID)
    values ('KP', '4545', '4444', '504', '1604');
    insert into D_F_MAP (SOURCE, SRC_DID, SRC_FID, EXT_DID, EXT_FID)
    values ('KP', '7858', '9646', '604', '1705');
    insert into D_F_MAP (SOURCE, SRC_DID, SRC_FID, EXT_DID, EXT_FID)
    values ('MS', '8799', '4544', '987', '1654');
    insert into FAC (TFID, SRC, DID, FID, CSAMT)
    values (10, 'KP', 854, 7754, 85000);
    insert into FAC (TFID, SRC, DID, FID, CSAMT)
    values (11, 'KP', 854, 7754, 44000);
    insert into FAC (TFID, SRC, DID, FID, CSAMT)
    values (12, 'KP', 4545, 4444, 47000);
    insert into FAC (TFID, SRC, DID, FID, CSAMT)
    values (13, 'KP', 7858, 9646, 80000);
    insert into FAC (TFID, SRC, DID, FID, CSAMT)
    values (14, 'MS', 8799, 4544, 60000);
    insert into FAC (TFID, SRC, DID, FID, CSAMT)
    values (15, 'KP', 854, 7754, 66000);
    insert into FAC_POS (FPID, CUSTID, SRC, DID, FID, SPOS)
    values (94, 5555, 'EXT', 504, 1604, 6000);
    insert into FAC_POS (FPID, CUSTID, SRC, DID, FID, SPOS)
    values (90, 1111, 'EXT', 101, 1202, 1000);
    insert into FAC_POS (FPID, CUSTID, SRC, DID, FID, SPOS)
    values (91, 2222, 'EXT', 302, 3652, 1000);
    insert into FAC_POS (FPID, CUSTID, SRC, DID, FID, SPOS)
    values (92, 3333, 'EXT', 987, 1654, 6000);
    insert into FAC_POS (FPID, CUSTID, SRC, DID, FID, SPOS)
    values (93, 4444, 'EXT', 604, 1705, 9000);
    insert into TRADING (TFID, SRC, TDATE, BID, SID)
    values (10, 'KP', to_date('10-02-2009', 'dd-mm-yyyy'), 1548, 96751);
    insert into TRADING (TFID, SRC, TDATE, BID, SID)
    values (11, 'KP', to_date('02-02-2009', 'dd-mm-yyyy'), 5468, 7895);
    insert into TRADING (TFID, SRC, TDATE, BID, SID)
    values (12, 'KP', to_date('20-02-2009', 'dd-mm-yyyy'), 1258, 6985);
    insert into TRADING (TFID, SRC, TDATE, BID, SID)
    values (13, 'KP', to_date('22-02-2009', 'dd-mm-yyyy'), 5468, 7865);
    insert into TRADING (TFID, SRC, TDATE, BID, SID)
    values (14, 'MS', to_date('18-02-2009', 'dd-mm-yyyy'), 4669, 6893);
    insert into TRADING (TFID, SRC, TDATE, BID, SID)
    values (15, 'KP', to_date('20-02-2009', 'dd-mm-yyyy'), 1548, 6975);
    insert into USERS_MAP (SRC_CUST_ID, EXT_CUST_ID, SRC)
    values ('9675', '1111', 'kp');
    insert into USERS_MAP (SRC_CUST_ID, EXT_CUST_ID, SRC)
    values ('5468', '2222', 'kp');
    insert into USERS_MAP (SRC_CUST_ID, EXT_CUST_ID, SRC)
    values ('6893', '3333', 'kp');
    insert into USERS_MAP (SRC_CUST_ID, EXT_CUST_ID, SRC)
    values ('5468', '4444', 'kp');
    insert into USERS_MAP (SRC_CUST_ID, EXT_CUST_ID, SRC)
    values ('7865', '5555', 'kp');
    insert into USERS_MAP (SRC_CUST_ID, EXT_CUST_ID, SRC)
    values ('6975', '6666', 'kp');
    insert into USERS_MAP (SRC_CUST_ID, EXT_CUST_ID, SRC)
    values ('6975', '7777', 'kp');
    insert into USERS_MAP (SRC_CUST_ID, EXT_CUST_ID, SRC)
    values ('6985', '8888', 'kp');Thanks.

    Hi,
    Thanks for posting the sample data in such a useful form! I'm sorry, I'm not at a database now, so I can't run it.
    What are the correct results you want from that data?
    You can outer-join to more than one table using ANSI notation.
    Another solution is to do some of the joins in a sub-query. It looks like the problem is with the est table. If you join all the tables except est in a sub-query, then you can join est to that result set in the main query.
    If you "want to display the data even if there is no corresponding data in the fac_pos table.", and fac_pos is being called flen, then you have the + signs in the wrong places.
    16         AND mtf.EXT_FID (+) = flen.FID              
    17         AND mtf.EXT_DID (+)  = flen.DID  means "display data from flen even if there is no match in mtf".

  • Can we write a join on a view and a table

    Hi all,
    can we write a join on a view and a table. i got the requirement from my functional people about the following one
    Select CAUFV-AFUNR, CAUFV-AUART, AFVC-VORNR, CAUFV-FTRMI, CRHD-ARBPL
    into <ProOrd>, <OrdTyp>, <Opt>, <RelDat>, <WorCen>
    from CAUFV, AFVC, CRHD
    where CAUFV-WERKS = plant in selection screen
    and CAUFV-AFUNR = production order in selection screen
    and CAUFV-AUART = production order type in selection screen
    and CAUFV-FTRMI = range of release date in selection screen
    and CAUFV-AUFPL = AFVC-AUFPL
    and AFVC-ARBID = CRHD-OBJID
    and CRHD-OBJTY = ‘A’
    here CAUFV is a view and CRHD and AFVC are transperent tables.
    please tell me any feasible solution for this..
    Thanks  in Advance..

    Hi
    Refer these links:
    <u>http://help.sap.com/saphelp_nw04/helpdata/en/cf/21ec84446011d189700000e8322d00/content.htm</u>
    <u>http://www.sap-img.com/abap/what-is-the-different-types-and-usage-of-views.htm</u>
    <u>http://www.karakas-online.de/forum/viewtopic.php?t=730</u>
    Thanks
    Vasudha
    Message was edited by:
            Vasudha L

  • Modify a SELECT Query on ISU DB tables to improve performance

    Hi Experts,
    I have a SELECT query in a Program which is hitting 6 DB tables by means of 5 inner joins.
    The outcome is that the program takes an exceptionally long time to execute, the SELECT statement being the main time consumer.
    Need your expertise on how to split the Query without affecting functionality -
    The Query :
    SELECT  fkkvkpgpart eablablbelnr eabladat eablistablart
      FROM eabl
      INNER JOIN eablg  ON eablgablbelnr = eablablbelnr
      INNER JOIN egerh  ON egerhequnr    = eablequnr
      INNER JOIN eastl  ON eastllogiknr  = egerhlogiknr
      INNER JOIN ever   ON everanlage    = eastlanlage
      INNER JOIN fkkvkp ON fkkvkpvkont   = evervkonto
      INTO TABLE itab
    WHERE eabl~adat GT [date which is (sy-datum - 3 years)]
    Thanks in advance,
    PD

    Hi Prajakt
    There are a couple of issues with the code provided by Aviansh:
    1) Higher Memory consumption by extensive use of internal tables (possible shortdump TSV_NEW_PAGE_ALLOC_FAILED)
    2) In many instances multiple SELECT ... FOR ALL ENTRIES... are not faster than a single JOIN statement
    3) In the given code the timeslices tables are limited to records active of today, which is not the same as your select (taking into account that you select for the last three years you probably want historical meter/installation relationships as well*)
    4) Use of sorted/hashed internal tables instead of standard ones could also improve the runtime (in case you stick to all the internal tables)
    Did you create an index on EABL including columns MANDT, ADAT?
    Did you check the execution plan of your original JOIN Select statement?
    Yep
    Jürgen
    You should review your selection, because you probably want business partner that was linked to the meter reading at the time of ADAT, while your select doesn't take the specific Contract / Device Installation of the time of ADAT into account.
    Example your meter reading is from 16.02.2010
    Meter 00001 was in Installation 3000001 between 01.02.2010 and 23.08.2010
    Meter 00002 was in Installation 3000001 between 24.08.2010 and 31.12.9999
    Installation 3000001 was linked to Account 4000001 between 01.01.2010 and 23.01.2011
    Installation 3000001 was linked to Account 4000002 between 24.01.2010 and 31.12.9999
    This means with your select returns four lines and you probably want only one.
    To achieve that you have to limit all timeslices to the date of EABL-ADAT (selects from EGERH, EASTL, EVER).
    Update:
    Coming back to point one and the memory consumption:
    What are you planning to do with the output of the select statment?
    Did you get a shortdump TSV_NEW_PAGE_ALLOC_FAILED with three years meter reading history?
    Or did you never run on production like volumes yet?
    Dependent on this you might want to redesign your program anyway.
    Edited by: sattlerj on Jun 24, 2011 10:38 AM

  • How to combine rows from different unrelated tables?

    I need to create a report where the data are coming from 2 unrelated tables.  My calculation needs data from both tables.  Is this possible within Crystal Reports without having to write complicated SQL commands?  If not, can someone provide an example of such a query?
    thanks in advance
    -Mark

    Morning Mark,
    Yes Amr is right however there has to be  some sort of link between the two tables to create a join. For example a Order no from one table matches with other Order no.
    There could be another possibility and that is if you have a third table which has two fields common to those two tables then when you bring the third table it will act as a middle man.
    If you need to bring the information onto the report according to some sort of criteria then those two tables need to be linked togeather at some point otherwise it won't work.
    For example
    I have two tables, FOC and Customer, both have nothing in common however the third table Orders has fields which is common to FOC and Customer. So I linked the two tables via Orders table. Now when I open my report my results are based on the Customer and FOC number.
    Hope this helps
    Regards
    Jehanzeb

  • How to do outer join select query for an APEX report

    Hello everyone,
    I am Ann.
    I have one select statement that calculate the statistics for one month(October 2012 in this example)
    select ph.phase_number
    , sum ( (case
    WHEN ph.date_finished IS NULL OR ph.date_finished > last_day(TO_DATE('Oct 2012','MON YYYY'))
    THEN last_day(TO_DATE('Oct 2012','MON YYYY'))
    ELSE ph.date_finished
    END )
    - ph.date_started + 1) / count(def.def_id) as avg_days
    from phase_membership ph
    inner join court_engagement ce on ph.mpm_eng_id = ce.engagement_id
    inner join defendant def on ce.defendant_id = def.def_id
    where def.active = 1
    and ph.date_started <= last_day(TO_DATE('Oct 2012','MON YYYY'))
    and ph.active = 1
    and UPPER(ce.court_name) LIKE '%'
    group by rollup(phase_number)
    Result is as below
    Phase_Number     AVG_DAYS
    Phase One     8.6666666666666667
    Phase Two     14.6
    Phase Three     12
         11.4615365
    I have other select list mainly list the months between two date value.
    select to_char(which_month, 'MON YYYY') as display_month
    from (
    select add_months(to_date('Aug 2012','MON YYYY'), rownum-1) which_month
    from all_objects
    where
    rownum <= months_between(to_date('Oct 2012','MON YYYY'), add_months(to_date('Aug 2012','MON YYYY'), -1))
    order by which_month )
    Query result is as below
    DISPLAY_MONTH
    AUG 2012
    SEP 2012
    OCT 2012
    Is there any way that I can join these two select statement above to generate a result like:
    Month          Phase Number     Avg days
    Aug 2012     Phase One     8.666
    Sep 2012     Phase One     7.66
    Oct 2012     Phase One     5.66
    Aug 2012     Phase Two     8.666
    Sep 2012     Phase Two     7.66
    Oct 2012     Phase Two     5.66
    Aug 2012     Phase Three     8.666
    Sep 2012     Phase Three     7.66
    Oct 2012     Phase Three     5.66
    Or
    Month          Phase Number     Avg days
    Aug 2012     Phase One     8.666
    Aug 2012     Phase Two     7.66
    Aug 2012     Phase Three     5.66
    Sep 2012     Phase One     8.666
    Sep 2012     Phase Two     7.66
    Sep 2012     Phase Three     5.66
    Oct 2012     Phase One     8.666
    Oct 2012     Phase Two     7.66
    Oct 2012     Phase Three     5.66
    And it can be order by either Phase Number or Month.
    My other colleague suggest I should use an left outer join but after trying so many ways, I am still stuck.
    One of the select I tried is
    select a.display_month,b.* from (
    select to_char(which_month, 'MON YYYY') as display_month
    from (
    select add_months(to_date('Aug 2012','MON YYYY'), rownum-1) which_month
    from all_objects
    where
    rownum <= months_between(to_date('Oct 2012','MON YYYY'), add_months(to_date('Aug 2012','MON YYYY'), -1))
    order by which_month )) a left outer join
    ( select to_char(ph.date_finished,'MON YYYY') as join_month, ph.phase_number
    , sum ( (case
    WHEN ph.date_finished IS NULL OR ph.date_finished > last_day(TO_DATE(a.display_month,'MON YYYY'))
    THEN last_day(TO_DATE(a.display_month,'MON YYYY'))
    ELSE ph.date_finished
    END )
    - ph.date_started + 1) / count(def.def_id) as avg_days
    from phase_membership ph
    inner join court_engagement ce on ph.mpm_eng_id = ce.engagement_id
    inner join defendant def on ce.defendant_id = def.def_id
    where def.active = 1
    and ph.date_started <= last_day(TO_DATE(a.display_month,'MON YYYY'))
    and ph.active = 1
    and UPPER(ce.court_name) LIKE '%'
    group by to_char(ph.date_finished,'MON YYYY') , rollup(phase_number)) b
    on a.display_month = b.join_month
    but then I get an error
    SQL Error: ORA-00904: "A"."DISPLAY_MONTH": invalid identifier
    I need to display a report on APEX with option for people to download at least CSV format.
    I already have 1 inteactive report in the page, so don’t think can add another interactive report without using the iframe trick.
    If any of you have any ideas, please help.
    Thanks a lot.
    Ann

    First of all, a huge thanks for following this Frank.
    I have just started working here, I think the Oracle version is 11g, but not sure.
    To run Oracle APEX version 4, I think they must have at least 10g R2.
    This report is a bit challenging for me.I has never worked with PARTITION before.
    About the select query you suggested, I run , and it seems working fine, but if I try this,
    it return error ORA-01843: not a valid month
    DEFINE startmonth = "Aug 2012";
    DEFINE endmonth   = "Oct 2012";
    WITH     all_months     AS
         select add_months(to_date('&startmonth','MON YYYY'), rownum-1) AS which_month
         ,      add_months(to_date('&startmonth','MON YYYY'), rownum  ) AS next_month
         from all_objects
         where
         rownum <= months_between(to_date('&endmonth','MON YYYY'), add_months(to_date('&startmonth','MON YYYY'), -1))
    select TO_CHAR (am.which_month, 'Mon YYYY')     AS month
    ,      ph.phase_number
    , sum ( (case
    WHEN ph.date_finished IS NULL OR ph.date_finished > last_day(TO_DATE(am.which_month,'MON YYYY'))
    THEN last_day(TO_DATE(am.which_month,'MON YYYY'))
    ELSE ph.date_finished
    END )
    - ph.date_started + 1) / count(def.def_id) as avg_days
    FROM           all_months          am
    LEFT OUTER JOIN  phase_membership  ph  PARTITION BY (ph.phase_number)
                                        ON  am.which_month <= ph.date_started
                               AND am.next_month  >  ph.date_started
                               AND ph.date_started <= last_day(TO_DATE(am.which_month,'MON YYYY'))  -- May not be needed
                               AND ph.active = 1
    LEFT OUTER join  court_engagement  ce  on  ph.mpm_eng_id = ce.engagement_id
                                        and ce.court_name IS NOT NULL  -- or something involving LIKE
    LEFT OUTER join  defendant         def on  ce.defendant_id = def.def_id
                                        AND def.active = 1
    group by rollup(phase_number, am.which_month)
    ORDER BY  am.which_month
    ,            ph.phase_number
    ;Here is the shorted versions of the three tables:
    A_DEFENDANT, A_ENGAGEMENT, A_PHASE_MEMBERSHIP
    CREATE TABLE "A_DEFENDANT"
        "DEF_ID"     NUMBER NOT NULL ENABLE,
        "FIRST_NAME" VARCHAR2(50 BYTE),
        "SURNAME"    VARCHAR2(20 BYTE) NOT NULL ENABLE,
        "DOB" DATE NOT NULL ENABLE,
        "ACTIVE" NUMBER(2,0) DEFAULT 1 NOT NULL ENABLE,
        CONSTRAINT "A_DEFENDANT_PK" PRIMARY KEY ("DEF_ID"))
    Sample Data
    Insert into A_DEFENDANT (DEF_ID,FIRST_NAME,SURNAME,DOB,ACTIVE) values (101,'Joe','Bloggs',to_date('12/12/99','DD/MM/RR'),1);
    Insert into A_DEFENDANT (DEF_ID,FIRST_NAME,SURNAME,DOB,ACTIVE) values (102,'John','Smith',to_date('20/05/00','DD/MM/RR'),1);
    Insert into A_DEFENDANT (DEF_ID,FIRST_NAME,SURNAME,DOB,ACTIVE) values (103,'Jane','Black',to_date('15/02/98','DD/MM/RR'),1);
    Insert into A_DEFENDANT (DEF_ID,FIRST_NAME,SURNAME,DOB,ACTIVE) values (104,'Minnie','Mouse',to_date('13/12/88','DD/MM/RR'),0);
    Insert into A_DEFENDANT (DEF_ID,FIRST_NAME,SURNAME,DOB,ACTIVE) values (105,'Daisy','Duck',to_date('05/08/00','DD/MM/RR'),1);
    CREATE TABLE "A_ENGAGEMENT"
        "ENGAGEMENT_ID" NUMBER NOT NULL ENABLE,
        "COURT_NAME"    VARCHAR2(50 BYTE) NOT NULL ENABLE,
        "DATE_REFERRED" DATE,
        "DETERMINATION_HEARING_DATE" DATE,
        "DATE_JOINED_COURT" DATE,
        "DATE_TREATMENT_STARTED" DATE,
        "DATE_TERMINATED" DATE,
        "TERMINATION_TYPE" VARCHAR2(50 BYTE),
        "ACTIVE"           NUMBER(2,0) DEFAULT 1 NOT NULL ENABLE,
        "DEFENDANT_ID"     NUMBER,
        CONSTRAINT "A_ENGAGEMENT_PK" PRIMARY KEY ("ENGAGEMENT_ID"))
    Insert into A_ENGAGEMENT (ENGAGEMENT_ID,COURT_NAME,DATE_REFERRED,DETERMINATION_HEARING_DATE,DATE_JOINED_COURT,DATE_TREATMENT_STARTED,DATE_TERMINATED,TERMINATION_TYPE,ACTIVE,DEFENDANT_ID) values (1,'AA',to_date('12/08/12','DD/MM/RR'),null,to_date('12/08/12','DD/MM/RR'),null,null,null,1,101);
    Insert into A_ENGAGEMENT (ENGAGEMENT_ID,COURT_NAME,DATE_REFERRED,DETERMINATION_HEARING_DATE,DATE_JOINED_COURT,DATE_TREATMENT_STARTED,DATE_TERMINATED,TERMINATION_TYPE,ACTIVE,DEFENDANT_ID) values (2,'BB',to_date('01/09/12','DD/MM/RR'),null,to_date('02/09/12','DD/MM/RR'),null,null,null,1,102);
    Insert into A_ENGAGEMENT (ENGAGEMENT_ID,COURT_NAME,DATE_REFERRED,DETERMINATION_HEARING_DATE,DATE_JOINED_COURT,DATE_TREATMENT_STARTED,DATE_TERMINATED,TERMINATION_TYPE,ACTIVE,DEFENDANT_ID) values (3,'AA',to_date('02/09/12','DD/MM/RR'),null,to_date('15/09/12','DD/MM/RR'),null,null,null,1,103);
    Insert into A_ENGAGEMENT (ENGAGEMENT_ID,COURT_NAME,DATE_REFERRED,DETERMINATION_HEARING_DATE,DATE_JOINED_COURT,DATE_TREATMENT_STARTED,DATE_TERMINATED,TERMINATION_TYPE,ACTIVE,DEFENDANT_ID) values (4,'BB',to_date('01/10/12','DD/MM/RR'),null,to_date('02/10/12','DD/MM/RR'),null,null,null,1,105);
    CREATE TABLE "A_PHASE_MEMBERSHIP"
        "MPM_ID"       NUMBER NOT NULL ENABLE,
        "MPM_ENG_ID"   NUMBER NOT NULL ENABLE,
        "PHASE_NUMBER" VARCHAR2(50 BYTE),
        "DATE_STARTED" DATE NOT NULL ENABLE,
        "DATE_FINISHED" DATE,
        "NOTES"  VARCHAR2(2000 BYTE),
        "ACTIVE" NUMBER(2,0) DEFAULT 1 NOT NULL ENABLE,
        CONSTRAINT "A_PHASE_MEMBERSHIP_PK" PRIMARY KEY ("MPM_ID"))
    Insert into A_PHASE_MEMBERSHIP (MPM_ID,MPM_ENG_ID,PHASE_NUMBER,DATE_STARTED,DATE_FINISHED,NOTES,ACTIVE) values (1,1,'PHASE ONE',to_date('15/09/12','DD/MM/RR'),to_date('20/09/12','DD/MM/RR'),null,1);
    Insert into A_PHASE_MEMBERSHIP (MPM_ID,MPM_ENG_ID,PHASE_NUMBER,DATE_STARTED,DATE_FINISHED,NOTES,ACTIVE) values (2,1,'PHASE TWO',to_date('21/09/12','DD/MM/RR'),to_date('29/09/12','DD/MM/RR'),null,1);
    Insert into A_PHASE_MEMBERSHIP (MPM_ID,MPM_ENG_ID,PHASE_NUMBER,DATE_STARTED,DATE_FINISHED,NOTES,ACTIVE) values (3,2,'PHASE ONE',to_date('12/09/12','DD/MM/RR'),null,null,1);
    Insert into A_PHASE_MEMBERSHIP (MPM_ID,MPM_ENG_ID,PHASE_NUMBER,DATE_STARTED,DATE_FINISHED,NOTES,ACTIVE) values (4,3,'PHASE ONE',to_date('20/09/12','DD/MM/RR'),to_date('01/10/12','DD/MM/RR'),null,1);
    Insert into A_PHASE_MEMBERSHIP (MPM_ID,MPM_ENG_ID,PHASE_NUMBER,DATE_STARTED,DATE_FINISHED,NOTES,ACTIVE) values (5,3,'PHASE TWO',to_date('02/10/12','DD/MM/RR'),to_date('15/10/12','DD/MM/RR'),null,1);
    Insert into A_PHASE_MEMBERSHIP (MPM_ID,MPM_ENG_ID,PHASE_NUMBER,DATE_STARTED,DATE_FINISHED,NOTES,ACTIVE) values (6,4,'PHASE ONE',to_date('03/10/12','DD/MM/RR'),to_date('10/10/12','DD/MM/RR'),null,1);
    Insert into A_PHASE_MEMBERSHIP (MPM_ID,MPM_ENG_ID,PHASE_NUMBER,DATE_STARTED,DATE_FINISHED,NOTES,ACTIVE) values (7,3,'PHASE THREE',to_date('17/10/12','DD/MM/RR'),null,null,0);
    Insert into A_PHASE_MEMBERSHIP (MPM_ID,MPM_ENG_ID,PHASE_NUMBER,DATE_STARTED,DATE_FINISHED,NOTES,ACTIVE) values (8,1,'PHASE THREE',to_date('30/09/12','DD/MM/RR'),to_date('16/10/12','DD/MM/RR'),null,1);
    The requirements are:
    The user must be able to request the extract for one or more calendar months, e.g.
    May 2013
    May 2013 – Sep 2013.
    The file must contain a separate row for each calendar month in the requested range. Each row must contain the statistics computed for that calendar month.
    The file must also include a row of totals.
    The user must be able to request the extract for either Waitakere or Auckland or Consolidated (both courts’ statistics accumulated).
    Then the part that I am stuck is
    For each monitoring phase:
    Phase name (e.g. “Phase One”)
    Avg_time_in_phase_all_particip
    for each phase name,
    Add up days in each “phase name” Monitoring Phase, calculated as:
    If Monitoring Phase.Date Finished is NULL or > month end date,
    +(*Month end date* Minus Monitoring Phase.Date Started Plus 1)+
    Otherwise (phase is complete)
    +(Monitoring Phase.Date Finished Minus Monitoring Phase.Date Started Plus 1.)+
    Divide by the numbers of all participants who have engaged in “phase name”.
    This is the words of the Business Analyst,
    I try to do as required but still struggle to identify end_month for the above formula to display for the range of months.
    Of course, I can write two nested cursor. The first one run the list of month, then for each month, run the parameterised report.
    But I prefer if possible just use SQL statements, or at least a PL/SQL but return a query.
    With this way, I can create an APEX report, and use their CSV Extract function.
    Yes, you are right, court_name is one of the selection parameters.
    And the statistics is not exactly for one month. It is kind of trying to identify all phases that are running through the specified month (even phase.date_started is before the month start).
    This is the reason why I put the condition AND ph.date_started <= last_day(TO_DATE('Oct 2012','MON YYYY')) (otherwise I get negative avg_days)
    User can choose either one court "AA" or "BB" or combined which is all figures.
    Sorry for bombarding you a lot of information.
    Thanks a lot, again.
    Edited by: Ann586341 on Oct 29, 2012 9:57 PM
    Edited by: Ann586341 on Oct 29, 2012 9:59 PM

  • How to create VO with multiple dynamic where clauses on select with UNION?

    I am trying to implement the View Object for the UNION query that looks like this:
         select a,b,c...
              from t1,t2,...
              where dynamic_where_clause1     
         union all
         select a,b,c,...
              from t11,t12, ...
              where dynamic_where_clause2
    There are up to 60 input parameters that are used to generate dynamic where clauses. They are actually created by calling PL SQL function.
    So far, I was not able to assign both where clauses to the view object. Is there a workable solution for this problem, besides resorting to programmatic View Object?
    I understand that recommended way with UNIONs is to wrap both queries into a parent select:
    select * from (
         select a,b,c...
              from t1,t2,...
              where ... -- table relationship joints
         union all
         select a,b,c,...
              from t11,t12, ...
              where ... -- table relationship joints
    ) QRSLT
         where dynamic_where_clause
    Unfortunately this approach doesn't work here, since individual selects are producing unmanageable amount of data and resulting query takes forever to complete.

    I afraid I would not have any real benefits from using VO if I replace the entire query with every request. Actually, the performance may suffer.
    I solved the problem by creating a POJO Data Control and invoking the custom select query from java. Not sure if it is the best approach to the problem, but implementation time is limited and it works.
    Actually, this is not the first time I see the need to implement VO with complicated SQL like select with unions and dynamic pieces. It would be nice to find a solution and not resort to workarounds.
    Edited by: viksicom on Aug 2, 2012 8:48 AM

  • Joining a ref cursor to a table

    Dear all;
    Can you please show me a simple example on how to join a ref cursor to a table because I have a function that returns a ref cursor and I would like to call that function in another function(function B) and then join it to a table in that function(function B)

    user13328581 wrote:
    well, I personnally know it is a bad idea but my fellow senior keeps advicing me to do it. Their reason is based on the code reusability aspect of things. I had a function 1 already created which returned a ref cursor and basically within that function is a complex select statement. Now I have function 2 which is making use of a similar select statement, the only different between the two select statment is based on the fact, the function 2 select statement is joining to another table at the very end, so based on their argument they want me to call that select statement from function 1 and join it to that table instead...Then your "+seniors+" need to extract their heads from whatever dark orifice they have it stuck in, as this is not how '"+code reusability+" works in the Oracle environment.
    In the SQL language, views are used to create re-usable SQL source code.
    In Oracle, the Shared Pool is used to create and store cursors for reuse (assuming the SQL source allows reusability and uses bind variables).
    Joining a ref cursor (code) with a table (data) is just plain stupid - and no amount of "code reusability" arguing will change this fact.

  • How to make select-option for one inner table

    Hi,
    Who can teach me to  make select-option for a inner table, which let select-option display data from this inner table.
    Thanks in advance.

    Is this what you are looking for?
    report zrich_0002.
    data: begin of itab occurs 0,
          matnr type mara-matnr,
          spras type makt-spras,
          maktx type makt-maktx,
          end of itab.
    select-options: s_matnr for itab-matnr.
    select-options: s_spras for itab-spras.
    start-of-selection.
      select mara~matnr makt~spras makt~maktx
               into corresponding fields of table itab
                      from mara
                            inner join makt
                               on mara~matnr = makt~matnr
                                        where mara~matnr in s_matnr
                                          and makt~spras in s_spras.
      check sy-subrc = 0.
    Regards,
    Rich Heilman

Maybe you are looking for

  • Can an editor and I work on the same project, at the same time in PPCC?

    I'm trying to figure out if two people can edit a project in live time... I'm currently struggling with the 20gb cloud limit for my projects and I think I'm just going to bring an in house editor into the mix.  Can he and I edit the same project from

  • VPN with more than one filter / nested ACL

    Dear All, Is there a way to assign more than one ACL to a VPN profile or implement a nested ACL structure? I am trying to avoid modifing a large list of ACLs to insert the same ACE in each ACL bound to different VPN profiles.

  • Importing Arabic languages from an external document into Flash

    Hi all. I'm working on a project that requires me to display an Arabic font next to an English translation. I'm having trouble getting the fonts to import and display correctly in Flash. I was wondering if anyone had any experience with this, or idea

  • Itunes restarts my pc!!!

    Hi i just joined this forum to see if anyone can help me. so my story starts iv been sorting out my itunes library properly getting all the artwork and making sure everything is tagged properly and everything was fine i finished what i was doing for

  • How to "eject" a sd cardreader

    I bought a card reader for my digital camera. connects no prob to the mac and I can upload the photos fine. BUT, how do I "eject' it? I dont see the device listed in finder. One thread I read seemed to suggest I should plug in the device THEN insert