SQL Join help required!

Hi all
I need help with a join.
If you click the image link below, I need to find a way to join table 1 and table 2 to get table3:
http://img229.imageshack.us/img229/1401/83192078uq8.jpg
Help would be very much appreciated!
Thanks in advance.

with Table1 as(select 1234 as ProjectID,'Smith' as LastName from dual
union select 1234,'Maria' from dual
union select 1234,'Victo' from dual),
Table2 as (select 1234 as ProjectID,200 as Val from dual
union select 1234,300 from dual
union select 1234,400 from dual)
select nvl(a.ProjectID,b.ProjectID) as ProjectID,a.LastName,b.Val
  from Table1 a full join Table2 b
    on 1=0;
PROJECTID  LASTN  VAL
     1234  Maria  null
     1234  Smith  null
     1234  Victo  null
     1234  null    200
     1234  null    300
     1234  null    400

Similar Messages

  • SQL Join Help

    SQL Experts,
    I have a query below. Can I improve the SQL joining order in highlighted section - Lines 31 to 40
    SNIOTM.SNI_PA_OTM_ARC_DRVR -- around 200K rows
    SNIOTM.SNI_PA_ORD_SHP_STATUS -- 8 rows
    Edited by: 922411 on May 12, 2013 7:42 PM

    922411 wrote:
    SQL Experts,
    I have a query below. Can I improve the SQL joining order in highlighted section - Lines 31 to 40
    SNIOTM.SNI_PA_OTM_ARC_DRVR -- around 200K rows
    SNIOTM.SNI_PA_ORD_SHP_STATUS -- 8 rowsYou need not worry about the Joining Order, Oracle CBO is efficient enough to choose the Most Efficient way of joining the tables. However, it will depend on your Oracle Version, which you have not mentioned. If you are 10g or higher then you certainly need not worry.
    If you sense a problem in performance of query, then I will suggest you read the linked threads in {message:id=9360003} and post the details as specified.
    Only this will help us provide releavant suggestions and avoid guessing games.
    PS:- Do not forget to post Oracle Version and the Explain Plan in {noformat}{noformat} tags, exactly as specified.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   

  • SQL Join help for multiple values in single field.

    Hello All,
    I need a help, I have two tables T1 and T2
    Content of T2 will be like
    T2. ID | T2.USERNAME
    ID1 | John
    ID2 | Peter
    ID3 | Mark
    Content of T1 is like
    T1.ID
    ID1 ID2 ID3
    ID2
    ID1 ID3
    I need to join these two tables and replace the T1.ID values with T2.USERNAME, for eg. Row one of T1 should be changed as John Peter Mark.
    Note: ID1 ID2 ID3 is a single value.
    Thanks for your help.
    Sathish.

    At Volder: I have made a slight enhancement. It's the same thing but the other way around as last week's regular expression thread. Remember the "and then the bird flew away"? ;-)
    SQL> create table t1
      2  as
      3  select 'ID1 ID2 ID3' id from dual union all
      4  select 'ID2' from dual union all
      5  select 'ID1 ID3' from dual union all
      6  select 'ID11 ID2' from dual
      7  /
    Tabel is aangemaakt.
    SQL> create table t2
      2  as
      3  select 'ID1' id, 'John' username from dual union all
      4  select 'ID2', 'Peter' from dual union all
      5  select 'ID3', 'Mark' from dual union all
      6  select 'ID11', 'Volder' from dual
      7  /
    Tabel is aangemaakt.
    SQL> select * from t1
      2   model
      3    reference r on (select t2.*, rownum rn from t2)
      4     dimension by (rn)
      5     measures(id, username)
      6    main m
      7     dimension by (id)
      8     measures(cast(id as varchar(200)) str)
      9     rules iterate(100) until (r.id[iteration_number+1] is null)
    10      (str[any] = replace(str[CV()], r.id[iteration_number+1],r.username[iteration_number+1]))
    11  /
    ID          STR
    ID1 ID2 ID3 John Peter Mark
    ID2         Peter
    ID1 ID3     John Mark
    ID11 ID2    John1 Peter
    4 rijen zijn geselecteerd.
    SQL> select id
      2       , str
      3    from t1
      4   model
      5         reference r on (select id,username,rownum rn from t2)
      6           dimension by (rn)
      7           measures (id, username)
      8         main m
      9           dimension by (id)
    10           measures (cast(' ' || id || ' ' as varchar2(200)) str)
    11           rules iterate(1000) until (r.id[iteration_number+1] is null)
    12           ( str[any] = replace
    13             ( str[cv()]
    14             , ' ' || r.id[iteration_number+1] || ' '
    15             , ' ' || r.username[iteration_number+1] || ' '
    16             )
    17           )
    18  /
    ID          STR
    ID1 ID2 ID3  John Peter Mark
    ID2          Peter
    ID1 ID3      John Mark
    ID11 ID2     Volder Peter
    4 rijen zijn geselecteerd.At Sathish: just look at the queries we have to come up with to do such a simple thing. As said many times before, I would also encourage you to change the design instead of executing the queries presented by Volder and me.
    Regards,
    Rob.
    Message was edited by:
    Rob van Wijk
    Just noticed I missed a final TRIM function around "str", so please add this.

  • Pl/sql  code  help required

    i have 3 string like below
    string1  varchar2(3000) := ' fonction code=''33'' and the limit for the subfunction is 300. it may have function_code=''100'' ) ) ) )';
    string2  varchar2(2000):='function_code=''100''';
    string3  varchar2(3000);requirement is
    if i found string2 in string1 preceded by four brackets ,example function_code=''100'' ) ) ) )' then
    i have replace to replace the 4th bracket with
    function code is null  )the string1 now will be
    ' fonction code=''33'' and the limit for the subfunction is 300. it may have function_code=''100'' ) ) ) function code is null  )Pls help
    NOte: bracket may or may not have spaces between them
    S

    SQL> declare
      2  string1  varchar2(3000) := 'AND NOT  (     (       (   FUNCTION_CODE = ''88''  )  OR  (   FUNCTION_CODE = ''21''  )  OR  (   FUNCTION_CODE = ''51'' )  OR  (   FUNCTION_CODE = ''85'' )  )  )  )' ;
      3  string2  varchar2(2000):='FUNCTION_CODE = ''85''';
      4  string3  varchar2(3000);
      5  begin
      6  string3 :=regexp_replace(string1,'^(.*)('||string2||')(([[:blank:]]?\)[[:blank:]]?){3})([[:blank:]]?\))(.*)$','\1\2\3function code is null\4\5');
      7  dbms_output.put_line(string3);
      8  end;
      9  /
    AND NOT  (  (  (   FUNCTION_CODE = '88'  )  OR  (   FUNCTION_CODE = '21'  )  OR  (   FUNCTION_CODE = '51' )  OR  (
    FUNCTION_CODE = '85' )  )  ) function code is null )  )
    PL/SQL procedure successfully completed.Best regards
    Maxim

  • Importing 30 tables into one SQL Table (Help Required)

    Dear Experts,
    I am new in SQL server, actually i need to gather 30 different excel file in one sql server table and i have imported all excel file in different databases, all tables have 186 different columns and datatypes. I couldnt change data type while conversion.
    Now all columns have different data type which are occupying extra space in my database.
    Now the problem is that i need to convert all databases into one database or table. Although i have created a table but i dont have idea how to import all table into one table  and defining datatype in new table while importing the old tables.
    Please help me in this matter or if any body has skype or any other chatting id please do let me know so that i may explain it better.
    Thanking you in advance.
    Best Regards,
    SQL_beginner

    There are several things you can try.  If you have SSIS, take a look at this.
    http://www.singhvikash.in/2013/06/ssis-how-to-load-multiple-excel-files.html
    https://www.simple-talk.com/sql/ssis/importing-excel-data-into-sql-server-via-ssis-questions-you-were-too-shy-to-ask/
    Also, if your files have virtually the same name, like files with dates in the name, you can loop through files in your folder, and increment the loop with each run through.
    DECLARE @intFlag
    INT
    SET @intFlag
    = 1
    WHILE (@intFlag
    <=30)
    BEGIN
    PRINT @intFlag
    declare @fullpath1
    varchar(1000)
    select @fullpath1
    = '''\\path to your files\'
    + convert(varchar,
    getdate()- @intFlag
    , 112)
    + '_your-text-file-name.txt'''
    declare @cmd1
    nvarchar(1000)
    select @cmd1
    = 'bulk insert [dbo].[your-table-name] from '
    + @fullpath1 +
    ' with (FIELDTERMINATOR = ''\t'', FIRSTROW = 2, ROWTERMINATOR=''0x0a'')'
    exec (@cmd1)
    SET @intFlag
    = @intFlag + 1
    END
    GO
    Knowledge is the only thing that I can give you, and still retain, and we are both better off for it.

  • SQL Loader Help required

    HI Team,
    I have requirement to load data in to table using sqlloader, as i am having three level's(Header, Detail, Trailer')
    first two position of data file represents the level like
    00-Header
    01 to 98 -Detail
    99 -Trailer
    each level will have different data structure and we should insert in to the same table
    i Have created table like
    CREATE TABLE APPS.XXD_TEST1
    AA NUMBER,
    TEST12 VARCHAR2(10 BYTE),
    testdt VARCHAR2(10 BYTE),
    testtr VARCHAR2(10 BYTE),
    RECORD_ID NUMBER
    and created sequence for record_id column
    --CREATE SEQUENCE APPS.XXD_TEST1_S
    i have data in the data file like below, i want to load the data in the same order
    000012
    010012
    010012
    020012
    030012
    990012
    000013
    010013
    020013
    030013
    990013
    i was using the folowwing control file
    LOAD DATA
    INFILE Test
    APPEND
    INTO TABLE xxd_test1
    WHEN (1:2) = '00'
    TRAILING NULLCOLS
    test12 POSITION(3:6) CHAR,
    aa POSITION(1:2) INTEGER EXTERNAL "lpad(:aa,2,'0')",
    record_id "xxd_test1_s.nextval"
    INTO TABLE xxd_test1
    WHEN (1:2) != '99' and (1:2) !='00'
    TRAILING NULLCOLS
    testdt POSITION(3:6) CHAR,
    aa POSITION(1:2) INTEGER EXTERNAL "lpad(:aa,2,'0')",
    record_id "xxd_test1_s.nextval"
    INTO TABLE xxd_test1
    WHEN (1:2) ='99'
    TRAILING NULLCOLS
    testtr POSITION(3:6) CHAR,
    aa POSITION(1:2) INTEGER EXTERNAL ,
    record_id "xxd_test1_s.nextval"
    But it was inserted in the following order
    000012
    000013
    010012
    010012
    020012
    020013
    030012
    030013
    990012
    990013
    Please help me with the solution.
    Thanks
    Sriram.

    Hi Karthick,
    we can do the order by caluse if we are having any column common to all the three levels
    here, for me record_type(first two positions) is the only common. but they may be duplicated in the file.
    Sample Data file
    000012
    01
    01
    02
    03
    99
    000013
    01
    02
    03
    99
    (first two positions represent the heirarchy like 00-header,(01-10)-Detail, 99-Trailer)
    this is sample file,it(detail,trailer) contains some extra fields also...but nothing is common to the header, detail and trailer.Can we generate any value which is common to the three levels? with respective to the header value!
    Looking for you solution..
    Regards,
    Sriram.

  • SQL Join Help Please

    Hi there,
    Thanks for checking this out.
    I have a slight problm with my query. It's not causing any
    errors at all, it's just not giving me the desired results I'm
    trying to get.
    <cfquery name="getSchemaFields" datasource="#request.dsn#"
    username="#request.username#" password="#request.password#">
    SELECT schema_#getSchemas.schema_token#_fields.*,
    fields_content.*
    FROM schema_#getSchemas.schema_token#_fields
    LEFT JOIN fields_content
    ON schema_#getSchemas.schema_token#_fields.field_type_uuid =
    fields_content.field_content_field_uuid
    WHERE fields_content.field_content_item_id =
    #getSchemas.item_id#
    AND fields_content.field_content_item_uuid =
    '#getSchemas.item_uuid#'
    </cfquery>
    This query returns all the results for items in
    "fields_content" where it matches in the "where" clause. But I need
    the query to return all records from the
    "schema_#getSchemas.schema_token#_fields" table regardless of
    wether or not any records are found in the "fields_content" table.
    I thought a LEFT JOIN would solve this and it does to a point.
    If I remove the WHERE and AND clauses I get all the rows, but
    I can't use this method because the records returned from
    "fields_content" need to be specific to an ID I have in the page
    (this comes from another query I do called "getSchemas").
    So basically, it works but only outputs rows where it finds
    it in both tables. If I take out there WHERE clause (which I need
    it causes other problems with my site, I need it to only pull back
    rows based on an ID)
    Is this making any sense? Probably not...hope you can
    understand, I'm getting mighty stressed at this one :-s
    Any help whatsoever would be great.
    Many thanks,
    Mickey.

    Hi Draves,
    Thanks for your response. I think I'm getting a little closer
    because now I simply get a syntax error. Like you said, I think
    it's something to do with paraenthesis. My query is now as follows:
    <cfquery name="getSchemaFields" datasource="#request.dsn#"
    username="#request.username#" password="#request.password#">
    SELECT schema_#getSchemas.schema_token#_fields.*,
    fields_content.*
    FROM schema_#getSchemas.schema_token#_fields
    LEFT JOIN fields_content
    ON schema_#getSchemas.schema_token#_fields.field_type_uuid =
    fields_content.field_content_field_uuid
    AND ON fields_content.field_content_item_id =
    <cfqueryparam cfsqltype="cf_sql_integer"
    value="#getSchemas.item_id#" />
    AND ON fields_content.field_content_item_uuid =
    <cfqueryparam cfsqltype="cf_sql_varchar"
    value="#getSchemas.item_uuid#" />
    </cfquery>
    But I get the following error (a bit nicer than before - if
    that makes sense, but still puzzling):
    [Macromedia][SequeLink JDBC Driver][ODBC
    Socket][Microsoft][ODBC Microsoft Access Driver] Syntax error
    (missing operator) in query expression ''.
    The error occurred in
    C:\ColdFusion8\wwwroot\coldbox\edit.cfm: line 152
    150 : ON
    schema_#getSchemas.schema_token#_fields.field_type_uuid =
    fields_content.field_content_field_uuid
    151 : AND ON fields_content.field_content_item_id =
    <cfqueryparam cfsqltype="cf_sql_integer"
    value="#getSchemas.item_id#" />
    152 : AND ON fields_content.field_content_item_uuid =
    <cfqueryparam cfsqltype="cf_sql_varchar"
    value="#getSchemas.item_uuid#" />
    153 : </cfquery>
    Hope that you'd be able to assist further. I have no clue
    where to put the paranthesis - I read the links you gave but they
    confused the hell out of me!! Clearly I don't consider myself a
    programmer, haha.
    Many thansk for your kind help!
    Mickey.

  • Convert decode oracle pl/sq to ms sql and help required on logic

    I have below oracle query need to converted to ms sql. I also want to add a record into journal table when a 
     insert portion is executed  "caseidinserted" and update portion executed then "caseidupdate".
    Update table1 target
    set curr =
    decode(
        select efforts from (
        select source.efforts efforts
          from
            SELECT     a.aid,a.efforts,ab.lcs
                FROM     CIP a, DC ab
                WHERE    a id = ab.id
                AND    a.id = @id
          ) source
          where target.caseid = @caseidupd
          and target.aid = source.aid
        ) tmp, 0, tmp.efforts, curr
    modi = getdate( )
    where exists
    select 1
    from table1 tgt
    where tgt.aid = target.aid
    and tgt.caseid = @caseidupd
    insert into table1 values(caseid, aid, modi)
        select @caseidupd, source.aid, getdate()
          from
            SELECT     a.aid,a.efforts,ab.lcs
                FROM     CIP a, DC ab
                WHERE    a id = ab.id
                AND    a.id = @id
          ) source
        where not exists
            select 1
            from table1 target
            where target.aid = source.aid
            and target.caseid = @caseidupd
    something like this...
    INSERT (caseid,aid,modi)
     select @caseidupd,'appupdated'+source.aid,getdate()
     INSERT (caseid,aid,modi)
      select (@caseidupd,'appinserted'+source.aid,getdate()

    Hello,
    I am not familiar with Oracle Function. If I understand correctly, you can MERGE to perform INSERT and UPDATE operations on a table in a single statement. Please refer to the following statements:
    MERGE INTO table1 AS Target
    USING (select @caseidupd, source.aid, getdate()
    from
    SELECT a.aid,a.efforts,ab.lcs
    FROM CIP a, DC ab
    WHERE a id = ab.id
    AND a.id = @id
    ) As Source (caseidupd,aid,date )
    ON Target.aid = source.aid and target.caseid =source.caseidupd
    WHEN MATCHED THEN
    UPDATE SET Target.curr=...,--query for get values
    Target.modi=getdate()
    WHEN NOT MATCHED BY TARGET THEN
    INSERT (caseid,aid,modi) values (caseidupd,'appupdated'+source.aid,getdate())
    Reference:http://msdn.microsoft.com/en-us/library/bb510625.aspx
    Regards,
    Fanny Liu
    Fanny Liu
    TechNet Community Support

  • Dynamic PL/SQL - Urgent help required

    Hi there
    I am trying to write a packaged function which takes the table name and column name as arguments and build a pl/sql table which the function returns.
    Please do find the code below:
    Create or Replace Package Pk_valid_values
    is
    TYPE list_rec is record ( lc_list_desc varchar2(50));
    TYPE list_tab is TABLE of list_rec
    index by binary_integer;
    FUNCTION Fn_fetch_values
    ( p_table_name varchar2,
    p_column_name varchar2 )
    return list_tab;
    End Pk_valid_values;
    Create or Replace Package Body Pk_valid_values
    as
    FUNCTION Fn_fetch_values
    ( p_table_name varchar2,
    p_column_name varchar2 )
    return list_tab
    is
    l_values Pk_valid_values.list_tab;
    i binary_integer := 0;
    lc_element varchar2(50);
    ln_dummy number;
    v_cursor integer;
    lc_string varchar2(2000);
    ln_count number;
    BEGIN
    ln_count := Pk_count_record.Count_record(p_table_name);
    v_cursor := dbms_sql.open_cursor;
    lc_string := 'begin select p_column_name into :felement from '||
    p_table_name||' ; end;';
    dbms_sql.parse( v_cursor,
    lc_string,
    dbms_sql.native );
    dbms_sql.bind_variable( v_cursor,
    ':felement',
    lc_element );
    ln_dummy := dbms_sql.execute( v_cursor );
    for i in 1..ln_count loop
    dbms_sql.variable_value( v_cursor,
    ':felement',
    lc_element );
    l_values(i) := lc_element;
    end loop;
    dbms_sql.close_cursor( v_cursor );
    return( l_values );
    END Fn_fetch_values;
    End Pk_valid_values;
    I get an error "PLS-00382: expression is of wrong type" when I try to create this package.
    Could anyone please let me know where I have gone wrong?
    I have really burst my heads against this.
    Thanks in advance
    Rajeev

    Hi,
    I think it is that you declare a PL/SQL block, not a cursor.
    Try to replace :
    lc_string := 'begin select p_column_name into :felement from '||
    p_table_name||' ; end;';
    with :
    lc_string := 'select ' || p_column_name || ' from ' || p_table_name;
    Or an easier way :
    declare
    TYPE RefCurTyp IS REF CURSOR;
    cr RefCurTyp;
    lc_element varchar2(50);
    begin
    OPEN cr FOR 'select ' || p_column_name || ' from ' || p_table_name;
    LOOP
    FETCH cr INTO lc_element;
    EXIT WHEN cr%NOTFOUND;
    END LOOP;
    CLOSE cr;
    end;
    /Uffe

  • Help - Bean Binding an SQL join to a gui component(jtable) in Netbeans?

    Good afternoon. I'd like to ask if there is a way to data bind an SQL Join from 2 or more tables to a
    GUI component(Jtable) in Netbeans. All the tutorials show is how to bind all the fields of 1 database table
    to the component. Under the BIND/ELements option the IMPORT DATA TO FORM menu only allows
    you to choose 1 among the database tables from a selected database.
    Is there a way to configure an SQL query and attach it to the component?
    Thanks.

    This is not a Swing problem. Try a NetBeans forum.

  • How to group using SQL for the required output.

    hi all,
    i'm currently using oracle 10.2.0.4.0
    create table script :
    CREATE TABLE FORTEST
    ( gpno VARCHAR2(10 BYTE),
      classnumber  VARCHAR2(10 byte),
      age_min NUMBER,
      age_max NUMBER,
      amount NUMBER)insert statement:
    insert into fortest  (GPNO,classnumber,age_min,age_max,amount) values
    ('G123' , 01,0,29,1)
    insert into fortest  (GPNO,classnumber,age_min,age_max,amount) values
    ('G123' , 01,30,35,2)
    insert into fortest  (GPNO,classnumber,age_min,age_max,amount) values
    ('G123' , 01,36,40,3)
    insert into fortest  (GPNO,classnumber,age_min,age_max,amount) values
    ('G123' , 02,0,29,1)
    insert into fortest  (GPNO,classnumber,age_min,age_max,amount) values
    ('G123' , 02,30,35,2)
    insert into fortest  (GPNO,classnumber,age_min,age_max,amount) values
    ('G123' , 02,36,40,5)
    insert into fortest  (GPNO,classnumber,age_min,age_max,amount) values
    ('G123' , 03,0,29,1)
    insert into fortest  (GPNO,classnumber,age_min,age_max,amount) values
    ('G123' , 03,30,35,2)
    insert into fortest  (GPNO,classnumber,age_min,age_max,amount) values
    ('G123' , 03,36,40,3)
    insert into fortest  (GPNO,classnumber,age_min,age_max,amount) values
    ('G124' , 01,0,29,1)
    insert into fortest  (GPNO,classnumber,age_min,age_max,amount) values
    ('G124' , 01,30,35,2)
    insert into fortest  (GPNO,classnumber,age_min,age_max,amount) values
    ('G124' , 01,36,40,3) output required:
    gpno    classnumber    age_min    age_max    amount
    G123    1,3                0        29        1
    G123    1,3                30       35        2
    G123    1,3                36       40        3
    G123    2                  0        29        1
    G123    2                  30       35        2
    G123    2                  36       40        5
    G124    1                  0        29        1
    G124    1                  30       35        2
    G124    1                  36       40        3since for gpno g123, classnumber 1 and 3, the rates are same across all age_min and age_max they need to be grouped together.
    even though gpno 123 classnumber 2 has same rates as classesnumber 1 and 3 for age bands 0 to 29 and 30 to 35,
    the rates are different for age bands 36 to 40. so it should not be grouped together. how can i do this in SQL
    any help is appreciated.
    thanks in advance.

    Hi,
    Tricky problem!
    Unfortunately, LISTAGG was only introduced in Oracle 11.2. About half of the complexity here is the string aggregation, that is, forming the list of classnumbers, such as '1,3', using only functions available in Oracle 10.2.
    Here's one solution:
    WITH     got_gpno_classnumber_cnt   AS
         SELECT     gpno, classnumber, age_min, age_max, amount
         ,     COUNT (*) OVER ( PARTITION BY  gpno
                                      ,            classnumber
                          )   AS gpno_classnumber_cnt
         FROM    fortest
    --     WHERE     ...     -- If you need any filtering, this is where it goes
    ,     pairs          AS
         SELECT    a.gpno
         ,       a.classnumber
         ,       MIN (b.classnumber)
                    OVER ( PARTITION BY  a.gpno
                              ,                    a.classnumber
                      )     AS super_classnumber
         FROM       got_gpno_classnumber_cnt  a
         JOIN       got_gpno_classnumber_cnt  b  ON   a.gpno     = b.gpno
                                      AND  a.age_min     = b.age_min
                                    AND  a.age_max     = b.age_max
                                    AND  a.amount     = b.amount
                                    AND  a.gpno_classnumber_cnt
                                            = b.gpno_classnumber_cnt
         GROUP BY  a.gpno
         ,            a.classnumber
         ,       b.classnumber
         HAVING       COUNT (*)     = MIN (a.gpno_classnumber_cnt)
    ,     got_rnk          AS
         SELECT DISTINCT     
                 gpno, classnumber, super_classnumber
         ,     DENSE_RANK () OVER ( PARTITION BY  gpno
                                   ,                    super_classnumber
                                   ORDER BY          classnumber
                           )         AS rnk
         FROM    pairs
    ,     got_classnumbers     AS
         SELECT     gpno, classnumber, super_classnumber
         ,      SUBSTR ( SYS_CONNECT_BY_PATH (classnumber, ',')
                       , 2
                     )     AS classnumbers     
         FROM     got_rnk
         WHERE     CONNECT_BY_ISLEAF = 1
         START WITH     rnk             = 1
         CONNECT BY     rnk             = PRIOR rnk + 1
              AND     gpno             = PRIOR gpno
              AND     super_classnumber  = PRIOR super_classnumber
    SELECT DISTINCT
           g.gpno
    ,       c.classnumbers
    ,       g.age_min
    ,       g.age_max
    ,       g.amount
    FROM       got_gpno_classnumber_cnt  g
    JOIN       got_classnumbers         c  ON   c.gpno        = g.gpno
                                 AND  c.classnumber  = g.classnumber
    ORDER BY  g.gpno
    ,            c.classnumbers
    ;Output (just as you requested):
    GPNO       CLASSNUMBERS       AGE_MIN    AGE_MAX     AMOUNT
    G123       1,3                      0         29          1
    G123       1,3                     30         35          2
    G123       1,3                     36         40          3
    G123       2                        0         29          1
    G123       2                       30         35          2
    G123       2                       36         40          5
    G124       1                        0         29          1
    G124       1                       30         35          2
    G124       1                       36         40          3

  • Sql tuning help

    Hi,
    I need some help on tuning this sql. We run a third party application and I have to ask thrid party for any changes. I have pasted the session statistice from the run for this sql.
    SELECT DECODE( RPAD(NVL(NWKPCDOUTWDPOSTCODE,' '),4,
    ' ')||RPAD(NVL(NWKPCDINWDPOSTCODE,' '),3,' '),
    RPAD(NVL(:zipout1,' '),4,' ')||RPAD(NVL(:zipin1,' '),3,' '),
    '0001', RPAD(NVL(:zipout2,' '),4,'
    ')||RPAD(SUBSTR(NVL(:zipin2,' '),0,1),3,' '), '0002',
    RPAD(NVL(:zipout3,' '),7,' '), '0003',
    RPAD('ZZ999',7,' '), '0004' ) AS CHECKER
    FROM NWKPCDREC
    WHERE NWKPCDNETWORKID = :netid
    AND NWKPCDSORTPOINT1TYPE != 'XXXXXXXX'
    AND ( (RPAD(NVL(NWKPCDOUTWDPOSTCODE,' '),4,' ')||RPAD(NVL(NWKPCDINWDPOSTCODE,' '),3,' ') =
    RPAD(NVL(:zipout4,' '),4,' ')||RPAD(NVL(:zipin3,' '),3,' '))
    OR (RPAD(NVL(NWKPCDOUTWDPOSTCODE,' '),4,'
    ')||RPAD(NVL(NWKPCDINWDPOSTCODE,' '),3,' ') =
    RPAD(NVL(:zipout5,' '),4,' ')||RPAD(SUBSTR(NVL(:zipin4,' '),0,
    1),3,' ')) OR (RPAD(NVL(NWKPCDOUTWDPOSTCODE,' '),4,'
    ')||RPAD(NVL(NWKPCDINWDPOSTCODE,' '),3,' ') =
    RPAD(NVL(:zipout6,' '),7,' ')) OR
    (RPAD(NVL(NWKPCDOUTWDPOSTCODE,' '),4,'
    ')||RPAD(NVL(NWKPCDINWDPOSTCODE,' '),3,' ') = RPAD('ZZ999',7,
    ' ')) ) ORDER BY CHECKER
    Session Statistics 09 October 2007 22:44:56 GMT+00:00
    Report Target : PRD1 (Database)
    Session Statistics
    (Chart form was tabular, see data table below)
    SID Name Value Class
    37 write clones created in foreground 0 Cache
    37 write clones created in background 0 Cache
    37 user rollbacks 16 User
    37 user commits 8674 User
    37 user calls 302838 User
    37 transaction tables consistent reads - undo records applied 0 Debug
    37 transaction tables consistent read rollbacks 0 Debug
    37 transaction rollbacks 9 Debug
    37 transaction lock foreground wait time 0 Debug
    37 transaction lock foreground requests 0 Debug
    37 transaction lock background gets 0 Debug
    37 transaction lock background get time 0 Debug
    37 total file opens 12 Cache
    37 table scans (short tables) 8062 SQL
    37 table scans (rowid ranges) 0 SQL
    37 table scans (long tables) 89 SQL
    37 table scans (direct read) 0 SQL
    37 table scans (cache partitions) 2 SQL
    37 table scan rows gotten 487042810 SQL
    37 table scan blocks gotten 7327924 SQL
    37 table fetch continued row 17 SQL
    37 table fetch by rowid 26130550 SQL
    37 switch current to new buffer 6400 Cache
    37 summed dirty queue length 0 Cache
    37 sorts (rows) 138607 SQL
    37 sorts (memory) 13418 SQL
    37 sorts (disk) 0 SQL
    37 session uga memory max 5176776 User
    37 session uga memory 81136 User
    37 session stored procedure space 0 User
    37 session pga memory max 5559884 User
    37 session pga memory 5559884 User
    37 session logical reads 115050107 User
    37 session cursor cache hits 0 SQL
    37 session cursor cache count 0 SQL
    37 session connect time 1191953042 User
    37 serializable aborts 0 User
    37 rows fetched via callback 1295545 SQL
    37 rollbacks only - consistent read gets 0 Debug
    37 rollback changes - undo records applied 114 Debug
    37 remote instance undo header writes 0 Global Cache
    37 remote instance undo block writes 0 Global Cache
    37 redo writes 0 Redo
    37 redo writer latching time 0 Redo
    37 redo write time 0 Redo
    37 redo wastage 0 Redo
    37 redo synch writes 8683 Cache
    37 redo synch time 722 Cache
    37 redo size 25463692 Redo
    37 redo ordering marks 0 Redo
    37 redo log switch interrupts 0 Redo
    37 redo log space wait time 0 Redo
    37 redo log space requests 1 Redo
    37 redo entries 81930 Redo
    37 redo buffer allocation retries 1 Redo
    37 redo blocks written 0 Redo
    37 recursive cpu usage 101 User
    37 recursive calls 84413 User
    37 recovery blocks read 0 Cache
    37 recovery array reads 0 Cache
    37 recovery array read time 0 Cache
    37 queries parallelized 0 Parallel Server
    37 process last non-idle time 1191953042 Debug
    37 prefetched blocks aged out before use 0 Cache
    37 prefetched blocks 1436767 Cache
    37 pinned buffers inspected 89 Cache
    37 physical writes non checkpoint 3507 Cache
    37 physical writes direct (lob) 0 Cache
    37 physical writes direct 3507 Cache
    37 physical writes 3507 Cache
    37 physical reads direct (lob) 0 Cache
    37 physical reads direct 2499 Cache
    37 physical reads 1591668 Cache
    37 parse time elapsed 336 SQL
    37 parse time cpu 315 SQL
    37 parse count (total) 28651 SQL
    37 parse count (hard) 1178 SQL
    37 opens requiring cache replacement 0 Cache
    37 opens of replaced files 0 Cache
    37 opened cursors current 51 User
    37 opened cursors cumulative 28651 User
    37 no work - consistent read gets 59086317 Debug
    37 no buffer to keep pinned count 0 Other
    37 next scns gotten without going to DLM 0 Parallel Server
    37 native hash arithmetic fail 0 SQL
    37 native hash arithmetic execute 0 SQL
    37 messages sent 9730 Debug
    37 messages received 0 Debug
    37 logons current 1 User
    37 logons cumulative 1 User
    37 leaf node splits 111 Debug
    37 kcmgss waited for batching 0 Parallel Server
    37 kcmgss read scn without going to DLM 0 Parallel Server
    37 kcmccs called get current scn 0 Parallel Server
    37 instance recovery database freeze count 0 Parallel Server
    37 index fast full scans (rowid ranges) 0 SQL
    37 index fast full scans (full) 210 SQL
    37 index fast full scans (direct read) 0 SQL
    37 immediate (CURRENT) block cleanout applications 4064 Debug
    37 immediate (CR) block cleanout applications 83 Debug
    37 hot buffers moved to head of LRU 20004 Cache
    37 global lock sync gets 0 Parallel Server
    37 global lock sync converts 0 Parallel Server
    37 global lock releases 0 Parallel Server
    37 global lock get time 0 Parallel Server
    37 global lock convert time 0 Parallel Server
    37 global lock async gets 0 Parallel Server
    37 global lock async converts 0 Parallel Server
    37 global cache read buffer lock timeouts 0 Global Cache
    37 global cache read buffer blocks served 0 Global Cache
    37 global cache read buffer blocks received 0 Global Cache
    37 global cache read buffer block timeouts 0 Global Cache
    37 global cache read buffer block send time 0 Global Cache
    37 global cache read buffer block receive time 0 Global Cache
    37 global cache read buffer block build time 0 Global Cache
    37 global cache prepare failures 0 Global Cache
    37 global cache gets 0 Global Cache
    37 global cache get time 0 Global Cache
    37 global cache freelist waits 0 Global Cache
    37 global cache defers 0 Global Cache
    37 global cache cr timeouts 0 Global Cache
    37 global cache cr requests blocked 0 Global Cache
    37 global cache cr blocks served 0 Global Cache
    37 global cache cr blocks received 0 Global Cache
    37 global cache cr block send time 0 Global Cache
    37 global cache cr block receive time 0 Global Cache
    37 global cache cr block flush time 0 Global Cache
    37 global cache cr block build time 0 Global Cache
    37 global cache converts 0 Global Cache
    37 global cache convert timeouts 0 Global Cache
    37 global cache convert time 0 Global Cache
    37 global cache blocks corrupt 0 Global Cache
    37 free buffer requested 1597281 Cache
    37 free buffer inspected 659 Cache
    37 execute count 128826 SQL
    37 exchange deadlocks 1 Cache
    37 enqueue waits 0 Enqueue
    37 enqueue timeouts 0 Enqueue
    37 enqueue requests 23715 Enqueue
    37 enqueue releases 23715 Enqueue
    37 enqueue deadlocks 0 Enqueue
    37 enqueue conversions 0 Enqueue
    37 dirty buffers inspected 437 Cache
    37 deferred (CURRENT) block cleanout applications 21937 Debug
    37 db block gets 230801 Cache
    37 db block changes 160407 Cache
    37 data blocks consistent reads - undo records applied 460 Debug
    37 cursor authentications 488 Debug
    37 current blocks converted for CR 0 Cache
    37 consistent gets 114819307 Cache
    37 consistent changes 460 Cache
    37 commit cleanouts successfully completed 37201 Cache
    37 commit cleanouts 37210 Cache
    37 commit cleanout failures: write disabled 0 Cache
    37 commit cleanout failures: hot backup in progress 0 Cache
    37 commit cleanout failures: cannot pin 0 Cache
    37 commit cleanout failures: callback failure 3 Cache
    37 commit cleanout failures: buffer being written 0 Cache
    37 commit cleanout failures: block lost 6 Cache
    37 cold recycle reads 0 Cache
    37 cluster key scans 17 SQL
    37 cluster key scan block gets 36 SQL
    37 cleanouts only - consistent read gets 83 Debug
    37 cleanouts and rollbacks - consistent read gets 0 Debug
    37 change write time 108 Cache
    37 calls to kcmgrs 0 Debug
    37 calls to kcmgcs 391 Debug
    37 calls to kcmgas 8816 Debug
    37 calls to get snapshot scn: kcmgss 171453 Parallel Server
    37 bytes sent via SQL*Net to dblink 0 User
    37 bytes sent via SQL*Net to client 25363874 User
    37 bytes received via SQL*Net from dblink 0 User
    37 bytes received via SQL*Net from client 29829542 User
    37 buffer is pinned count 540816 Other
    37 buffer is not pinned count 86108905 Other
    37 branch node splits 6 Debug
    37 background timeouts 0 Debug
    37 background checkpoints started 0 Cache
    37 background checkpoints completed 0 Cache
    37 Unnecesary process cleanup for SCN batching 0 Parallel Server
    37 SQL*Net roundtrips to/from dblink 0 User
    37 SQL*Net roundtrips to/from client 302837 User
    37 Parallel operations not downgraded 0 Parallel Server
    37 Parallel operations downgraded to serial 0 Parallel Server
    37 Parallel operations downgraded 75 to 99 pct 0 Parallel Server
    37 Parallel operations downgraded 50 to 75 pct 0 Parallel Server
    37 Parallel operations downgraded 25 to 50 pct 0 Parallel Server
    37 Parallel operations downgraded 1 to 25 pct 0 Parallel Server
    37 PX remote messages sent 0 Parallel Server
    37 PX remote messages recv'd 0 Parallel Server
    37 PX local messages sent 0 Parallel Server
    37 PX local messages recv'd 0 Parallel Server
    37 OS Voluntary context switches 0 OS
    37 OS User time used 0 OS
    37 OS System time used 0 OS
    37 OS Swaps 0 OS
    37 OS Socket messages sent 0 OS
    37 OS Socket messages received 0 OS
    37 OS Signals received 0 OS
    37 OS Page reclaims 0 OS
    37 OS Page faults 0 OS
    37 OS Maximum resident set size 0 OS
    37 OS Involuntary context switches 0 OS
    37 OS Integral unshared stack size 0 OS
    37 OS Integral unshared data size 0 OS
    37 OS Integral shared text size 0 OS
    37 OS Block output operations 0 OS
    37 OS Block input operations 0 OS
    37 DML statements parallelized 0 Parallel Server
    37 DFO trees parallelized 0 Parallel Server
    37 DDL statements parallelized 0 Parallel Server
    37 DBWR undo block writes 0 Cache
    37 DBWR transaction table writes 0 Cache
    37 DBWR summed scan depth 0 Cache
    37 DBWR revisited being-written buffer 0 Cache
    37 DBWR make free requests 0 Cache
    37 DBWR lru scans 0 Cache
    37 DBWR free buffers found 0 Cache
    37 DBWR cross instance writes 0 Global Cache
    37 DBWR checkpoints 0 Cache
    37 DBWR checkpoint buffers written 0 Cache
    37 DBWR buffers scanned 0 Cache
    37 Commit SCN cached 0 Debug
    37 Cached Commit SCN referenced 1 Debug
    37 CR blocks created 203 Cache
    37 CPU used when call started 280528 Debug
    37 CPU used by this session 280528 User
    Regards
    Raj
    --------------------------------------------------------------------------------

    Thank you everybody for helping me out while tuning the query. I have managed to bring down the run time from 60 minutes to 12 minutes.
    I am posting the exisitng query, existing database objects ddl and the new query and new ddl to share my learning. This is my first use of forum, senior members, please letme know if I shouldn't have put all this here.
    /pre original code
    SELECT decode(rpad(nvl(a.nwkpcdoutwdpostcode, ' '), 4, ' ') || rpad(nvl(
    a.nwkpcdinwdpostcode, ' '), 3, ' '), rpad(nvl(:zipout1, ' '), 4, ' ')
    || rpad(nvl(:zipin1, ' '), 3, ' '), '0001', rpad(nvl(:zipout2, ' '), 4,
    ' ') || rpad(substr(nvl(:zipin2, ' '), 0, 1), 3, ' '), '0002',
    rpad(nvl(:zipout3, ' '), 7, ' '), '0003', rpad('ZZ999', 7, ' '), '0004')
    AS checker, a.nwkpcdbarcode1to7 nwkpcdbarcode1to7,
    a.nwkpcdbarcode15 nwkpcdbarcode15,
    a.nwkpcdbarcodeseqkey nwkpcdbarcodeseqkey,
    a.nwkpcdsortpoint1code nwkpcdsortpoint1code,
    a.nwkpcdsortpoint1type nwkpcdsortpoint1type,
    a.nwkpcdsortpoint1name nwkpcdsortpoint1name,
    a.nwkpcdsortpoint1extra nwkpcdsortpoint1extra,
    a.nwkpcdsortpoint2type nwkpcdsortpoint2type,
    a.nwkpcdsortpoint2name nwkpcdsortpoint2name,
    a.nwkpcdsortpoint3type nwkpcdsortpoint3type,
    a.nwkpcdsortpoint3name nwkpcdsortpoint3name,
    a.nwkpcdsortpoint4type nwkpcdsortpoint4type,
    a.nwkpcdsortpoint4name nwkpcdsortpoint4name,
    b.nwkprfnetworksequence nwkprfnetworksequence,
    b.nwkprfnetworkid nwkprfnetworkid, b.nwkprfnetworkname nwkprfnetworkname,
    b.nwkprfminweight / 100 AS nwkprfminweight, b.nwkprfmaxweight / 100 AS
    nwkprfmaxweight, b.nwkprfminlengthgirth nwkprfminlengthgirth,
    b.nwkprfmaxlengthgirth nwkprfmaxlengthgirth,
    b.nwkprfminlength nwkprfminlength, b.nwkprfmaxlength nwkprfmaxlength,
    b.nwkprfparceltypecode nwkprfparceltypecode,
    b.nwkprfparceltypename nwkprfparceltypename
    FROM wh1.nwkpcdrec a, wh1.nwkprefrec b
    WHERE a.nwkpcdnetworkid = b.nwkprfnetworkid
    AND a.nwkpcdsortpoint1type != 'XXXXXXXX'
    AND (rpad(nvl(a.nwkpcdoutwdpostcode, ' '), 4, ' ') || rpad(nvl(
    a.nwkpcdinwdpostcode, ' '), 3, ' ') = rpad(nvl(:zipout4, ' '), 4, ' '
    ) || rpad(nvl(:zipin3, ' '), 3, ' ')
    OR rpad(nvl(a.nwkpcdoutwdpostcode, ' '), 4, ' ') || rpad(nvl(
    a.nwkpcdinwdpostcode, ' '), 3, ' ') = rpad(nvl(:zipout5, ' '), 4, ' '
    ) || rpad(substr(nvl(:zipin4, ' '), 0, 1), 3, ' ')
    OR rpad(nvl(a.nwkpcdoutwdpostcode, ' '), 4, ' ') || rpad(nvl(
    a.nwkpcdinwdpostcode, ' '), 3, ' ') = rpad(nvl(:zipout6, ' '), 7, ' '
    OR rpad(nvl(a.nwkpcdoutwdpostcode, ' '), 4, ' ') || rpad(nvl(
    a.nwkpcdinwdpostcode, ' '), 3, ' ') = rpad('ZZ999', 7, ' '))
    AND :weight1 >= b.nwkprfminweight
    AND :weight2 <= b.nwkprfmaxweight
    AND b.nwkprfminlengthgirth <= 60
    AND b.nwkprfmaxlengthgirth >= 60
    AND b.nwkprfminlength <= 15
    AND b.nwkprfmaxlength >= 15
    ORDER BY b.nwkprfnetworkid, checker
    CREATE TABLE "WH1"."NWKPCDREC" ("NWKPCDFILECODE" VARCHAR2(2),
    "NWKPCDRECORDTYPE" VARCHAR2(4), "NWKPCDNETWORKID" VARCHAR2(2),
    "NWKPCDOUTWDPOSTCODE" VARCHAR2(4), "NWKPCDINWDPOSTCODE"
    VARCHAR2(3), "NWKPCDSORTPOINT1CODE" VARCHAR2(2),
    "NWKPCDSORTPOINT1TYPE" VARCHAR2(8), "NWKPCDSORTPOINT1NAME"
    VARCHAR2(16), "NWKPCDSORTPOINT1EXTRA" VARCHAR2(16),
    "NWKPCDSORTPOINT2TYPE" VARCHAR2(8), "NWKPCDSORTPOINT2NAME"
    VARCHAR2(8), "NWKPCDSORTPOINT3TYPE" VARCHAR2(8),
    "NWKPCDSORTPOINT3NAME" VARCHAR2(8), "NWKPCDSORTPOINT4TYPE"
    VARCHAR2(8), "NWKPCDSORTPOINT4NAME" VARCHAR2(8), "NWKPCDPPI"
    VARCHAR2(8), "NWKPCDBARCODE1TO7" VARCHAR2(7),
    "NWKPCDBARCODE15" VARCHAR2(1), "NWKPCDBARCODESEQKEY"
    VARCHAR2(7), "NWKPCDFILLER1" VARCHAR2(7), "NWKPCDFILLER2"
    VARCHAR2(30),
    CONSTRAINT "UK_NWKPCDREC" UNIQUE("NWKPCDNETWORKID",
    "NWKPCDOUTWDPOSTCODE", "NWKPCDINWDPOSTCODE")
    USING INDEX
    TABLESPACE "WH1_INDEX"
    STORAGE ( INITIAL 64K NEXT 0K MINEXTENTS 1 MAXEXTENTS
    2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1)
    PCTFREE 10 INITRANS 2 MAXTRANS 255)
    TABLESPACE "WH1_DATA_LARGE" PCTFREE 10 PCTUSED 40 INITRANS 1
    MAXTRANS 255
    STORAGE ( INITIAL 4096K NEXT 4096K MINEXTENTS 1 MAXEXTENTS
    2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1)
    NOLOGGING
    pre original script/
    /pre modified script
    CREATE TABLE "WH1"."NWKPCEREC_OLD" ("NWKPCDFILECODE" VARCHAR2(2),
    "NWKPCDRECORDTYPE" VARCHAR2(4), "NWKPCDNETWORKID" VARCHAR2(2),
    "NWKPCDOUTWDPOSTCODE" VARCHAR2(4), "NWKPCDINWDPOSTCODE"
    VARCHAR2(3), "NWKPCDSORTPOINT1CODE" VARCHAR2(2),
    "NWKPCDSORTPOINT1TYPE" VARCHAR2(8), "NWKPCDSORTPOINT1NAME"
    VARCHAR2(16), "NWKPCDSORTPOINT1EXTRA" VARCHAR2(16),
    "NWKPCDSORTPOINT2TYPE" VARCHAR2(8), "NWKPCDSORTPOINT2NAME"
    VARCHAR2(8), "NWKPCDSORTPOINT3TYPE" VARCHAR2(8),
    "NWKPCDSORTPOINT3NAME" VARCHAR2(8), "NWKPCDSORTPOINT4TYPE"
    VARCHAR2(8), "NWKPCDSORTPOINT4NAME" VARCHAR2(8), "NWKPCDPPI"
    VARCHAR2(8), "NWKPCDBARCODE1TO7" VARCHAR2(7),
    "NWKPCDBARCODE15" VARCHAR2(1), "NWKPCDBARCODESEQKEY"
    VARCHAR2(7), "NWKPCDFILLER1" VARCHAR2(7), "NWKPCDFILLER2"
    VARCHAR2(30))
    TABLESPACE "WH1_DATA_LARGE" PCTFREE 10 PCTUSED 40 INITRANS 1
    MAXTRANS 255
    STORAGE ( INITIAL 4096K NEXT 4096K MINEXTENTS 1 MAXEXTENTS
    2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1)
    NOLOGGING
    insert into wh1.nwkpcdrec_old select * from wh1.nwkpcdrec;
    drop table wh1.nwkpcdrec;
    CREATE TABLE "WH1"."NWKPCDREC" ("NWKPCDFILECODE" VARCHAR2(2),
    "NWKPCDRECORDTYPE" VARCHAR2(4), "NWKPCDNETWORKID" VARCHAR2(2),
    "NWKPCDOUTINWDPOSTCODE" VARCHAR2(7) NOT NULL,
    "NWKPCDOUTWDPOSTCODE" VARCHAR2(4), "NWKPCDINWDPOSTCODE"
    VARCHAR2(3), "NWKPCDSORTPOINT1CODE" VARCHAR2(2),
    "NWKPCDSORTPOINT1TYPE" VARCHAR2(8), "NWKPCDSORTPOINT1NAME"
    VARCHAR2(16), "NWKPCDSORTPOINT1EXTRA" VARCHAR2(16),
    "NWKPCDSORTPOINT2TYPE" VARCHAR2(8), "NWKPCDSORTPOINT2NAME"
    VARCHAR2(8), "NWKPCDSORTPOINT3TYPE" VARCHAR2(8),
    "NWKPCDSORTPOINT3NAME" VARCHAR2(8), "NWKPCDSORTPOINT4TYPE"
    VARCHAR2(8), "NWKPCDSORTPOINT4NAME" VARCHAR2(8), "NWKPCDPPI"
    VARCHAR2(8), "NWKPCDBARCODE1TO7" VARCHAR2(7),
    "NWKPCDBARCODE15" VARCHAR2(1), "NWKPCDBARCODESEQKEY"
    VARCHAR2(7), "NWKPCDFILLER1" VARCHAR2(7), "NWKPCDFILLER2"
    VARCHAR2(30))
    TABLESPACE "WH1_DATA_LARGE" PCTFREE 10 PCTUSED 40 INITRANS 1
    MAXTRANS 255
    STORAGE ( INITIAL 4096K NEXT 4096K MINEXTENTS 1 MAXEXTENTS
    2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1)
    NOLOGGING
    INSERT INTO WH1.NWKPCDREC SELECT
                   NWKPCDFILECODE,
                   NWKPCDRECORDTYPE,
                   NWKPCDNETWORKID,
                   rpad(nvl(nwkpcdoutwdpostcode, ' '), 4, ' ') || rpad(nvl(nwkpcdinwdpostcode, ' '), 3, ' '),
                   nwkpcdoutwdpostcode,
                   nwkpcdinwdpostcode,
                   NWKPCDSORTPOINT1CODE,
                   NWKPCDSORTPOINT1TYPE,
                   NWKPCDSORTPOINT1NAME,
                   NWKPCDSORTPOINT1EXTRA,
                   NWKPCDSORTPOINT2TYPE,
                   NWKPCDSORTPOINT2NAME,
                   NWKPCDSORTPOINT3TYPE,
                   NWKPCDSORTPOINT3NAME,
                   NWKPCDSORTPOINT4TYPE,
                   NWKPCDSORTPOINT4NAME,
                   NWKPCDPPI,
                   NWKPCDBARCODE1TO7,
                   NWKPCDBARCODE15,
                   NWKPCDBARCODESEQKEY,
                   NWKPCDFILLER1,
                   NWKPCDFILLER2
    FROM WH1.NWKPCDREC_OLD;
    CREATE UNIQUE INDEX "WH1"."UK_NWKPCDREC"
    ON "WH1"."NWKPCDREC" ("NWKPCDNETWORKID",
    "NWKPCDOUTINWDPOSTCODE")
    TABLESPACE "WH1_INDEX" PCTFREE 10 INITRANS 2 MAXTRANS
    255
    STORAGE ( INITIAL 8192K NEXT 8192K MINEXTENTS 1 MAXEXTENTS
    2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1)
    LOGGING
    begin
    dbms_stats.gather_table_stats(ownname=> 'WH1', tabname=> 'NWKPCDREC', partname=> NULL);
    end;
    begin
    dbms_stats.gather_index_stats(ownname=> 'WH1', indname=> 'UK_NWKPCDREC', partname=> NULL);
    end;
    SELECT decode(a.nwkpcdoutinwdpostcode, rpad(nvl(:zipout1, ' '), 4, ' ') ||
    rpad(nvl(:zipin1, ' '), 3, ' '), '0001', rpad(nvl(:zipout2, ' '), 4, ' '
    ) || rpad(substr(nvl(:zipin2, ' '), 0, 1), 3, ' '), '0002', rpad(
    nvl(:zipout3, ' '), 7, ' '), '0003', rpad('ZZ999', 7, ' '), '0004') AS
    checker, a.nwkpcdbarcode1to7 nwkpcdbarcode1to7,
    a.nwkpcdbarcode15 nwkpcdbarcode15,
    a.nwkpcdbarcodeseqkey nwkpcdbarcodeseqkey,
    a.nwkpcdsortpoint1code nwkpcdsortpoint1code,
    a.nwkpcdsortpoint1type nwkpcdsortpoint1type,
    a.nwkpcdsortpoint1name nwkpcdsortpoint1name,
    a.nwkpcdsortpoint1extra nwkpcdsortpoint1extra,
    a.nwkpcdsortpoint2type nwkpcdsortpoint2type,
    a.nwkpcdsortpoint2name nwkpcdsortpoint2name,
    a.nwkpcdsortpoint3type nwkpcdsortpoint3type,
    a.nwkpcdsortpoint3name nwkpcdsortpoint3name,
    a.nwkpcdsortpoint4type nwkpcdsortpoint4type,
    a.nwkpcdsortpoint4name nwkpcdsortpoint4name,
    b.nwkprfnetworksequence nwkprfnetworksequence,
    b.nwkprfnetworkid nwkprfnetworkid, b.nwkprfnetworkname nwkprfnetworkname,
    b.nwkprfminweight / 100 AS nwkprfminweight, b.nwkprfmaxweight / 100 AS
    nwkprfmaxweight, b.nwkprfminlengthgirth nwkprfminlengthgirth,
    b.nwkprfmaxlengthgirth nwkprfmaxlengthgirth,
    b.nwkprfminlength nwkprfminlength, b.nwkprfmaxlength nwkprfmaxlength,
    b.nwkprfparceltypecode nwkprfparceltypecode,
    b.nwkprfparceltypename nwkprfparceltypename
    FROM wh1.nwkpcdrec a, wh1.nwkprefrec b
    WHERE a.nwkpcdnetworkid = b.nwkprfnetworkid
    AND a.nwkpcdoutinwdpostcode IN (rpad(nvl(:zipout4, ' '), 4, ' ') ||
    rpad(nvl(:zipin3, ' '), 3, ' '), rpad(nvl(:zipout5, ' '), 4, ' ')
    || rpad(substr(nvl(:zipin4, ' '), 0, 1), 3, ' '), rpad(nvl(:zipout6,
    ' '), 7, ' '), rpad('ZZ999', 7, ' '))
    AND a.nwkpcdsortpoint1type != 'XXXXXXXX'
    AND :weight1 >= b.nwkprfminweight
    AND :weight2 <= b.nwkprfmaxweight
    AND b.nwkprfminlengthgirth <= 60
    AND b.nwkprfmaxlengthgirth >= 60
    AND b.nwkprfminlength <= 15
    AND b.nwkprfmaxlength >= 15
    ORDER BY b.nwkprfnetworkid, checker
    pre modified script/

  • Advance aggreate function: help required

    Hi All, Pls help me in solving the below requirement
    Sample Data:
    F1 F2 F3
    [email protected] A 1
    [email protected] B 1
    [email protected] A 2
    [email protected] A 1
    Unique combination of F2 & F3 to be treated as a account.
    Need to find the total accounts related to the domain along
    with Unique emailID's and the accounts related to each email.
    Required Output:
    o1 o2 o3 o4
    d1.com [email protected] 3 2
    d1.com [email protected] 3 1
    d1.com [email protected] 3 1
    o1: Domain
    o2: Unique email ID's in the Domain
    o3: Unique accounts accessible by Domain
    o4: Unique accounts accessible by Email
    I'm able to get o1, o2 & o4 with the following sql
    SELECT a.domain, a.F1, COUNT (a.rnum)
    FROM (SELECT UNIQUE ROWNUM rnum,
    SUBSTR (TRIM (F1),
    INSTR (TRIM (F1), '@') + 1
    ) AS domain,
    F1, F2, F3
    FROM tab1
    WHERE F1 LIKE '%d1.com%') a
    GROUP BY a.domain, a.F1
    Pls help me in completing this sql for the required output.
    Thanks :-)

    What version/edition of Oracle are you using? Can you use analytics?
    SELECT a.domain, a.F1, COUNT (a.rnum),
    count(a.domain) over (partition by a.domain) domain_count
    FROM (SELECT UNIQUE ROWNUM rnum,
    SUBSTR (TRIM (F1),
    INSTR (TRIM (F1), '@') + 1
    ) AS domain,
    F1, F2, F3
    FROM tab1
    WHERE F1 LIKE '%d1.com%') a
    GROUP BY a.domain, a.F1;
    DOMAIN               F1                   COUNT(A.RNUM) DOMAIN_COUNT
    d1.com               [email protected]                    2            3
    d1.com               [email protected]                    1            3
    d1.com               [email protected]                    1            3

  • SQL JOIN with BPM sql component

    Hello friends.
    How to use SQL JOIN with BPM sql component?
    The tables objects are created but the joined tables belong to different sql components .
    I tried something like that, but a error "table doesn't exist" occours.
    Ex:
    for each element in
    SELECT imuImovelCd
    FROM IMOVEIS_URBANOS,
    Integracao.FGLP.IMOVEIS_PRE_EDITAIS
    WHERE IMOVEIS_URBANOS.imuImovelCd = Integracao.FGLP.IMOVEIS_PRE_EDITAIS.ipeImuCd
    AND Integracao.FGLP.IMOVEIS_PRE_EDITAIS.ipePedNr = 1
    AND Integracao.FGLP.IMOVEIS_PRE_EDITAIS.ipePedAa = 2008
    do
    extend this.imoveis using cdImovel = element.imuimovelcd,
                                  nrImovel = call(DEC_ENDERECO, codimovel : element.imuimovelcd, tipoimovel : 1)
    end
    Edited by: user9008295 on 26/01/2010 05:19

    ok, ok you are right.
    When I try use SQL Statement to make a JOIN with 2 tables on different sql objects, BPM returns "table dosn't exists".
    So.... I change my code. I dont know if this is the best way to do, but... i hope u, or everyone, can help me to do a best work.
    This code works fine.
    for each element in
    SELECT ipeImuCd
         FROM Integracao.FGLP.IMOVEIS_PRE_EDITAIS
         WHERE Integracao.FGLP.IMOVEIS_PRE_EDITAIS.ipePedNr = 1
         AND Integracao.FGLP.IMOVEIS_PRE_EDITAIS.ipePedAa = 2008
    do
         for each element2 in
              SELECT imuImovelDv
              FROM IMOVEIS_URBANOS
              WHERE imuImovelCd = element.ipeImuCd
         do
              extend this.imoveis using cdDvImovel = String(element2.imuImovelDv),
                                            cdImovel = Decimal(element.ipeImuCd),
                                            endereco = call(DEC_ENDERECO, codimovel : element.ipeImuCd, tipoimovel : 1)
         end
    end
    Thx a lot!!!

  • Converting oracle join to Ansi sql join

    Hi Guys,
    I am new to SQL and trying to convert the following Oracle query (joins) into ANSI sql joins...Can someone please help me?
    SELECT M.EXTERNALCODE, M.NAME AS MNAME, SC.BIRIM, SM.TRANSACTIONDATE, SMD.AMOUNT,
    SMD.UNITPRICE, SM.ID AS SMID, SMD.ID AS SMDID, F.NAME AS FNAME,
    IFNULL (SMD.AMOUNT, 0, SMD.AMOUNT) * IFNULL (SMD.UNITPRICE, 0, SMD.UNITPRICE) AS TOTALPRICE, SMD.AMOUNT AS RECEIVED_QUANTITY,
    PD.ORDERID, PD.AMOUNT QUANTITY, PO.PROCESSDATE
    FROM STOCKMAINTRANSACTION SM,
    STOCKMAINTRANSACTIONDETAIL SMD,
    MATERIAL M,
    STOCKCARD SC,
    FVSTOCK FVS,
    FIRM F,
    PURCHASEORDER PO,
    PURCHASEORDERDETAIL PD,
    PURCHASEORDERDETAILSUPPLIED PDS
    WHERE SM.ID = SMD.MAINTRANSACTIONID
    AND SMD.MATERIALID = M.ID
    AND SMD.STOCKCARDID = SC.ID
    AND SM.PROPREF = FVS.RECORDID(+)
    AND FVS.FIELDID(+) = 2559
    AND FVS.FLEVEL(+) = 'F'
    AND F.ID(+) = SUBSTR (FVS.FVALUE, 1, 9)
    AND SM.TRANSDEFID in (999,2329,2344,2370,150000903,150005362)
    AND SMD.CANCELLED = 0
    AND SMD.STOCKUPDATED = 1
    AND SMD.ID = PDS.STOCKMAINTRANSACTIONDETAILID
    AND PDS.ORDERDETAILID = PD.ORDERDETAILID
    AND PO.ORDERID = PD.ORDERID
    AND (M.ID = {@MATERIALID@} OR {@MATERIALID@} = 0)
    AND (SM.STOREID = {@STOREID@} OR {@STOREID@} = 0)
    AND (F.ID = {@SUPPLIERID@} OR {@SUPPLIERID@} = 0)
    AND SM.TRANSACTIONDATE BETWEEN {@STARTDATE@} AND {@ENDDATE@}
    ORDER BY F.NAME, M.EXTERNALCODE, SM.TRANSACTIONDATE
    Really appreciate the help!
    Thanks.

    Hi,
    Welcome to the forum!
    To convert to ANSI syntax, replace join conditions in the WHERE clause
    FROM           x
    ,             y
    WHERE         x.x1  = y.y1
    AND           x.x2  = y.y2with ON conditions in the FROM clause:
    FROM           x
    JOIN             y   ON    x.x1  = y.y1
                             AND   x.x2  = y.y2In inner joins, conditions that do not reference 2 tables are not really join conditions, so it doesn't matter if they are in the FROM clause or in the WHERE clause.
    In your case
    SM.TRANSDEFID in (999,2329,2344,2370,150000903,150005362)could be part of a join condition involving sm, or it could be in the WHERE clause. Most people find it clearer if 1-table conditions like this are in the WHERE clause.
    Again, this only applies to inner joins. For outer joins, all conditions that apply to a table that may lack matching rows must be included in the FROM clause, like this:
    LEFT OUTER JOIN  fvstock   fvs  ON   sm.propref       = fvs.recordid
                                    AND  fvs.fieldid  = 2559
                        AND  fvs.flevel   = 'F'Try it.
    If you have trouble, post your best attempt, along with CREATE TABLE and INSERT statements for a little sample data from all the tables involved, and the results you want from that data. Simplify the problem. Post only the tables and columns that you don't know how to handle.
    See the forum FAQ {message:id=9360002}
    user8428528 wrote:
    AND (M.ID = {@MATERIALID@} OR {@MATERIALID@} = 0)
    AND (SM.STOREID = {@STOREID@} OR {@STOREID@} = 0)
    AND (F.ID = {@SUPPLIERID@} OR {@SUPPLIERID@} = 0)
    AND SM.TRANSACTIONDATE BETWEEN {@STARTDATE@} AND {@ENDDATE@}This is not valid Oracle SQL. Is {@MATERIALID@} some kind of variable?

Maybe you are looking for

  • Display is not working But Through Screen Sharing I can Access my computer

    Ok. After turning my computer off and then turning it back on a couple hours later the screen would not turn on. Im still able to log in. With screen Sharing I can acces my computer and system profiler shows that my RAM cards are OK. However when I c

  • How can I get a larger output size without dropouts?

    Using FMLE 3.2 to push HD to UStream.  Capture card is a Decklink Studio2.  Codec is h.264.  I see blocking and get dropouts on the input side when I increase the output size above 720 x 404.  I have used different bit rates, up to 2500.  Same proble

  • Creating CSV ETL from ValueObject collection

    Hey all, Suprisingly, I can not find a lot of information regarding direct ETL/export from a javabean collection (i.e. a ValueObject collection from EJB) into a CSV for export. Part of the ETL is to map specific javabean properties to the CSV in a pa

  • Automatic Exit of form

    Hello I have small application. I want the form to be closed automatically if user is idle for more 5 minutes. How i can solve this problem. Please help me Dhanunjaya Rao

  • Deleting the totals in the view

    Hi, Is there any way to eliminate the totals in the demand planning view? How could it be done? Thanks a lot