SQL Query help ( On connect By level clause)

Hi all,
I have this query developed with data in with clause.
With dat As
  select '@AAA @SSS @DDD' col1 from dual union all
  select '@ZZZ @XXX @TTT @RRR @ZZA' col1 from dual
Select regexp_substr( col1 , '[^@][A-Z]+',1,level) Show from dat
connect by level  <= regexp_count(col1, '@');Current output :-
SHOW
AAA
SSS
DDD
RRR
ZZA
TTT
RRR
ZZA
XXX
DDD
RRR
SHOW
ZZA
TTT
RRR
ZZA
. . .1st row comes fine, But next row data is getting duplicated. And total record count = 30. I tried with some but didn't work.
Expected output :-
SHOW
AAA
SSS
DDD
ZZZ
XXX
TTT
RRR
ZZAI need some change on my query and I am not able to find that. So anybody can add on that or can also provide some different solution too.
Thanks!
Ashutosh

Hi,
When you use something like "CONNECT BY LEVEL <= x", then at least one of the following must be true:
(a) the table has no more than 1 row
(b) there are other conditions in the CONNECT BY clause, or
(c) you know what you are doing.
To help see why, run this query
SELECT     SYS_CONNECT_BY_PATH (dname, '/')     AS path
,     LEVEL
FROM     scott.dept
CONNECT BY     LEVEL <= 3
;and study the results:
PATH                                     LEVEL
/ACCOUNTING                                  1
/ACCOUNTING/ACCOUNTING                       2
/ACCOUNTING/ACCOUNTING/ACCOUNTING            3
/ACCOUNTING/ACCOUNTING/RESEARCH              3
/ACCOUNTING/ACCOUNTING/SALES                 3
/ACCOUNTING/ACCOUNTING/OPERATIONS            3
/ACCOUNTING/RESEARCH                         2
/ACCOUNTING/RESEARCH/ACCOUNTING              3
/ACCOUNTING/RESEARCH/RESEARCH                3
/ACCOUNTING/RESEARCH/SALES                   3
/ACCOUNTING/RESEARCH/OPERATIONS              3
/ACCOUNTING/SALES                            2
/ACCOUNTING/SALES/ACCOUNTING                 3
84 rows selected.

Similar Messages

  • SQL query in SQL_REDO Logminor showing where clause with ROWID

    SQL query in SQL_REDO Logminor showing where clause with ROWID. I dont wanted to use rowid but wanted to use actual value.
    OPERATION SQL_REDO SQL_UNDO
    DELETE delete from "OE"."ORDERS" insert into "OE"."ORDERS"
    where "ORDER_ID" = '2413' ("ORDER_ID","ORDER_MODE",
    and "ORDER_MODE" = 'direct' "CUSTOMER_ID","ORDER_STATUS",
    and "CUSTOMER_ID" = '101' "ORDER_TOTAL","SALES_REP_ID",
    and "ORDER_STATUS" = '5' "PROMOTION_ID")
    and "ORDER_TOTAL" = '48552' values ('2413','direct','101',
    and "SALES_REP_ID" = '161' '5','48552','161',NULL);
    and "PROMOTION_ID" IS NULL
    and ROWID = 'AAAHTCAABAAAZAPAAN';
    DELETE delete from "OE"."ORDERS" insert into "OE"."ORDERS"
    where "ORDER_ID" = '2430' ("ORDER_ID","ORDER_MODE",
    and "ORDER_MODE" = 'direct' "CUSTOMER_ID","ORDER_STATUS",
    and "CUSTOMER_ID" = '101' "ORDER_TOTAL","SALES_REP_ID",
    and "ORDER_STATUS" = '8' "PROMOTION_ID")
    and "ORDER_TOTAL" = '29669.9' values('2430','direct','101',
    and "SALES_REP_ID" = '159' '8','29669.9','159',NULL);
    and "PROMOTION_ID" IS NULL
    and ROWID = 'AAAHTCAABAAAZAPAAe';
    Please let me know solution/document which will convert SQL redo rowid value with actual value.
    Thanks,

    Please enclose your output within tag so that people here can read it easily and help you. Also the reason that why you want to remove rowid?
    Salman
    Edited by: Salman Qureshi on Mar 20, 2013 3:53 PM                                                                                                                                                                                                                                                                                                                                                                                                                                   

  • SQL Query Help Needed

    I'm having trouble with an SQL query. I've created a simple logon page wherein a user will enter their user name and password. The program will look in an Access database for the user name, sort it by Date/Time modified, and check to see if their password matches the most recent password. Unfortunately, the query returns no results. I'm absolutely certain that I'm doing the query correctly (I've imported it directly from my old VB6 code). Something simple is eluding me. Any help would be appreciated.
    private void LogOn() {
    //make sure that the user name/password is valid, then load the main menu
    try {
    //open the database connection
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    Connection con = DriverManager.getConnection("jdbc:odbc:LawOffice2000", "", "");
    Statement select = con.createStatement();
    String strTemp = "Select * From EMPLOYEES Where INITIALS = '" + txtUserName.getText() + "' Order By DATE Desc, TIME Desc";
    ResultSet result = select.executeQuery(strTemp);
    while(result.next()) {
    if (txtPassword.getPassword().toString() == result.getString("Password")) {
    MenuMain.main();
    else {
    System.out.println("Password Bad");
    System.out.println(txtUserName.getText());
    System.out.println(result.getString("Password"));
    break; //exit loop
    //close the connection
    con.close(); }
    catch (Exception e) {
    System.out.println("LawOfficeSuite_LogOn: " + e);
    return; }
    }

    The problem is here: "txtPassword.getPassword().toString() == result.getString("Password"))"
    Don't confuse String's equals() method with the equality operator '=='. The == operator checks that two references refer to the same object. If you want to compare the contents of Strings (whether two strings contain the same characters), use equals(), e.g. if (str1.equals(str2))...
    Example:String s1 = "foo";
    String s2 = new String("foo");
    System.out.println("s1 == s2: " + (s1 == s2)); // false
    System.out.println("s1.equals(s2): " + (s1.equals(s2))); // trueFor more information, check out Comparison operators: equals() versus ==

  • SQL Query Help - Is this possible or impossible????

    Hi guys,
    I need help with an SQL query that I'm trying to develop. It's very easy to explain but when trying to implement it, I'm struggling to achieve the results that I want.....
    For example,
    I have 2 tables
    The first table is:
    1) COMPANY create table company (manufacturer varchar2(25),
                                                          date_established date,
                                                          location varchar2(25) );My sample test date is:
    insert into company values ('Ford', 1902, 'USA');
    insert into company values ('BMW', 1910, 'Germany');
    insert into company values ('Tata', 1922, 'India');The second table is:
    2) MODELS create table models (manufacturer varchar(25),
                                                 model varchar2(25),
                                                 price number(10),
                                                 year date,
                                                 current_production_status varchar2(1) ) ;My sample test data is:
    insert into models values ('Ford', 'Mondeo', 10000, 2010, 0);
    insert into models values ('Ford', 'Galaxy', 12000,   2008, 0);
    insert into models values ('Ford', 'Escort', 10000, 1992, 1);
    insert into models values ('BMW', '318', 17500, 2010, 0);
    insert into models values ('BMW', '535d', 32000,   2006, 0);
    insert into models values ('BMW', 'Z4', 10000, 1992, 0);
    insert into models values ('Tata', 'Safari', 4000, 1999, 0);
    insert into models values ('Tata', 'Sumo', 5500,   1996, 1);
    insert into models values ('Tata', 'Maruti', 3500, 1998, 0);And this is my query:
    SELECT
            com.manufacturer,
            com.date_established,
            com.location,
            DECODE(nvl(mod.current_production_status, '0'), '0', '-', mod.model),
            DECODE(nvl(mod.current_production_status, '0'), '0', '-', mod.price),
            DECODE(nvl(mod.current_production_status, '0'), '0', '-', mod.year),
            mod.current_production_status
    FROM
           company com,
           models mod
    WHERE
          mod.manufacturer = com.manufacturer
          and com.manufacturer IN ('Ford', 'BMW', 'Tata')
          and mod.current_production_status IN (1,0)
    ORDER BY
            mod.current_production_status DESCWhat I want the query to output is this:
    com.manufacturer        com.date_established          com.location          mod.model          mod.price             mod.year     mod.current_production_status
    Ford               1902                    USA               Escort               10000               1992          1
    BMW               1910                    Germany               -               -               -          0
    Tata               1922                    India               Sumo               5500               1998          1If current_production_status is 1 it means this particular model has been discontinued
    If current_production_status is 0 it means the manufacturer does not have any discontinued models and all are in procuction.
    The rule is only one record per manufacturer is allowed to have a current_production_status of 1 (so only one model from the selection the manufactuer offers is allowed to be discontinued).
    So the query should output the one row where current_production_status is 1 for each manufacturer.
    If for a given manufacturer there are no discontinued models and all have a current_production_status of 0 then ouput a SINGLE row that only includes the data from the COMPANY table (as above). The rest of the columns from the MODELS table should be populated with a '-' (hyphen).
    My query as it is above will output all the records where current status is 1 or 0 like this
    com.manufacturer        com.date_established          com.location          mod.model          mod.price          mod.year     mod.current_production_status
    Ford               1902                    USA               Escort               10000               1992          1
    Tata               1922                    India               Sumo               5500               1998          1
    Ford               1902                    USA               -               -               -          0                    
    Ford               1902                    USA               -               -               -          0
    BMW               1910                    Germany               -               -               -          0
    BMW               1910                    Germany               -               -               -          0
    BMW               1910                    Germany               -               -               -          0
    Tata               1922                    India               -               -               -          0
    Tata               1922                    India               -               -               -          0However this is not what I want.
    Any ideas how I can achieve the result I need?
    Thanks!
    P.S. Database version is '10.2.0.1.0'

    Hi Vishnu,
    Karthiks query helped...
    But this is the problem I am facing...
    SELECT
            com.manufacturer,
            com.date_established,
            com.location,
            DECODE(nvl(mod.current_production_status, '0'), '0', '-', mod.model),
            DECODE(nvl(mod.current_production_status, '0'), '0', '-', mod.price),
            DECODE(nvl(mod.current_production_status, '0'), '0', '-', mod.year),
            mod.current_production_status
    FROM
           company com,
           models mod
    WHERE
          mod.manufacturer = com.manufacturer
          and com.manufacturer = 'Ford'
          and mod.current_production_status IN (1,0)
    ORDER BY
            mod.current_production_status DESCThe value of:
    and com.manufacturer = 'Ford'will be dependent on front end user input....
    When I run the query above I get all the rows where current_production_status is either 1 or 0.
    I only require the rows where current_production_status is 1.
    So if I amend it to look like this:
         and mod.current_production_status = 1This works....
    BUT if a user now passes in more than one manufacturer EG:
    and com.manufacturer IN ('Ford', 'BMW')The query will only return the one row for Ford where current_production_status is 1. However because BMW has no models where current_production_status is 1 (all 3 are 0), I still want this to be output - as one row....
    So like this:
    com.manufacturer        com.date_established          com.location          mod.model          mod.price             mod.year     mod.current_production_status
    Ford               1902                    USA               Escort               10000               1992          1
    BMW               1910                    Germany               -               -               -          0So (hopefully you understand), I want both cases to be catered for.....whether a user enters one manufacturer or more than one...
    Thanks you so much!
    This is really driving me insane :-(

  • SQL query optimization by changinf the WHERE clause

    Hi all,
    I need to know about the SQL query performance improvement by changing the WHERE clause. Consider a query :
    select * from student where country ='India' and age = 20
    Say, country = 'India' filters 100000 records and age = 20 filters 2000 records if given one by one. Now can anyone tell if the performance of the query can be changed by changing the query like this :
    select * from student where age = 20 and country ='India'
    as first where clause will give 2000 results and next filter will be applicable on only 2000 rows. While in the former query first where clause would give 100000 rows and seconde filter, hence, would be applicable on 100000 rows???
    Kindly explain.
    Thanks in advance.
    Abhideep

    in general the order of the where condition should not be important. However there are a few exeptions where sometimes it might play a role. Sometimes this is called order of filter conditions. Among others it depends on RBO or CBO used, Oracle Version, Indexes on the columns, statistic information on the table and the columns, CPU statistics in place etc.
    If you want to make this query fast and you know that the age column has much better selectivity then you can simply put an index on the age column. An index on the country column is probably not useful at all, since to little different values are in this column. If you are already in 11g I would suggest to use a composite index on both columns with the more selective in first position.
    Edited by: Sven W. on Nov 17, 2008 2:23 PM
    Edited by: Sven W. on Nov 17, 2008 2:24 PM

  • Sql query - help reqd

    Hi,
    I require help for sql query. The query will be like
    "SELECT * FROM XYZ WHERE TEXT = 'h*s' "
    and the results will be come like
    “his”
    “homes”
    “houses”
    “horses”,
    “horticulturalists”
    “herbaceous”.
    Thanks,
    Kapil

    Hello,
    SELECT   *
      FROM   XYZ
    WHERE   TEXT LIKE ('h%s');Regards
    Edited by: OrionNet on Feb 2, 2009 12:33 AM

  • Sql query - help reqd (new)

    Hi,
    I have follwing dataset
    "herb with garden"
    "garden without herb"
    "herb with zbc"
    "garden with pqr"
    Now i want sql query like
    select * from table where text1 = "herb and garden"
    This should populate
    herb with garden
    garden without herb
    And
    select * from table where text1 = "herb or garden"
    This should populate
    "herb with garden"
    "garden without herb"
    "herb with zbc"
    "garden with pqr"

    SQL> with t
      2  as
      3  (
      4     select 'herb with garden' str from dual union all
      5     select 'garden without herb' str from dual union all
      6     select 'herb with zbc' str from dual union all
      7     select 'garden with pqr' str from dual
      8  )
      9  select *
    10    from t
    11   where lower(str) like '%herb%'
    12     and lower(str) like '%garden%'
    13  /
    STR
    herb with garden
    garden without herb
    SQL> with t
      2  as
      3  (
      4     select 'herb with garden' str from dual union all
      5     select 'garden without herb' str from dual union all
      6     select 'herb with zbc' str from dual union all
      7     select 'garden with pqr' str from dual
      8  )
      9  select *
    10    from t
    11   where lower(str) like '%herb%'
    12     or lower(str) like '%garden%'
    13  /
    STR
    herb with garden
    garden without herb
    herb with zbc
    garden with pqr

  • Sql query help,i need a query to get like this without union clause

    empno ename sum(sal) sum(deptno)
    200 tom 2000 10
    201 smith 3000 10
    202 alfred 3000 20
    total 8000 40

    Hi,
    group by rollup (empno,ename) add one row in the end of each same group empno,ename : empno ename sum(sal) sum(deptno) and one in the end ( total)
    but group by rollup ((empno,ename)) add only one row in the end total ..... SQL> select nvl(to_char(empno),'Total'), ename,sum(sal),sum(deptno)
      2  from emp
      3  group by rollup (empno,ename)
      4  /
    NVL(TO_CHAR(EMPNO),'TOTAL')              ENAME        SUM(SAL) SUM(DEPTNO)
    7900                                     JAMES             950          30
    7900                                                       950          30
    7369                                     SMITH             800          20
    7369                                                       800          20
    7499                                     ALLEN            1600          30
    7499                                                      1600          30
    7521                                     WARD             1250          30
    7521                                                      1250          30
    7566                                     JONES            2975          20
    7566                                                      2975          20
    7654                                     MARTIN           1250          30
    7654                                                      1250          30
    7698                                     BLAKE            2850          30
    7698                                                      2850          30
    7782                                     CLARK            2450          10
    7782                                                      2450          10
    7788                                     SCOTT            3000          20
    7788                                                      3000          20
    7839                                     KING             5000          10
    7839                                                      5000          10
    7844                                     TURNER           1500          30
    7844                                                      1500          30
    7876                                     ADAMS            1100          20
    7876                                                      1100          20
    7902                                     FORD             3000          20
    7902                                                      3000          20
    7934                                     MILLER           1300          10
    7934                                                      1300          10
    Total                                                    29025         310
    29 rows selected.
    SQL>  select nvl(to_char(empno),'Total'), ename,sum(sal),sum(deptno)
      2   from emp
      3   group by rollup ((empno,ename));
    NVL(TO_CHAR(EMPNO),'TOTAL')              ENAME        SUM(SAL) SUM(DEPTNO)
    7900                                     JAMES             950          30
    7369                                     SMITH             800          20
    7499                                     ALLEN            1600          30
    7521                                     WARD             1250          30
    7566                                     JONES            2975          20
    7654                                     MARTIN           1250          30
    7698                                     BLAKE            2850          30
    7782                                     CLARK            2450          10
    7788                                     SCOTT            3000          20
    7839                                     KING             5000          10
    7844                                     TURNER           1500          30
    7876                                     ADAMS            1100          20
    7902                                     FORD             3000          20
    7934                                     MILLER           1300          10
    Total                                                    29025         310
    15 rows selected.
    SQL> Edited by: Salim Chelabi on May 9, 2009 5:12 PM
    Edited by: Salim Chelabi on May 9, 2009 5:28 PM

  • Complex SQL query help

    Hi,
    I was wondering if I could have some help with the query I have below for this general data set, please? I need to do it in a single SQL statement. We're currently running Oracle 10g. The piece I'm struggling with is identifying that the person has all the items in a collection and to include the collection in the resulting collection of items.
    persons_items
    person     item
    Ted          cup
    Ted          saucer
    Ted          plate
    Ted          fork
    Alice          book
    Alice          thimble
    Alice          knife
    Alice          cup
    Joe          cup
    Joe          saucer
    Joe          plate
    Joe          knife
    Joe          fork
    Joe          spoon
    Jessica     spatula
    Jessica     dish
    collections
    collection_name     item
    crockery     cup
    crockery     saucer
    crockery     plate
    cutlery          knife
    cutlery          fork
    cutlery          spoon
    Query:
    What single items and collections does Ted have?     fork, crockery
    What single items and collections does Alice have?     book, thimble, knife, cup
    What single items and collections does Joe have?     crockery, cutlery
    What single items and collections does Jessica have?     spatula, dish
    Thanks in advance.
    Pat

    Expanding on Brendan's solution...
    For 11g:
    SQL> ed
    Wrote file afiedt.buf
      1  WITH person_items AS (
      2          SELECT 'Ted' person, 'cup' item FROM DUAL UNION
      3          SELECT 'Ted', 'saucer' FROM DUAL UNION
      4          SELECT 'Ted', 'plate' FROM DUAL UNION
      5          SELECT 'Ted', 'fork' FROM DUAL UNION
      6          SELECT 'Alice', 'book' FROM DUAL UNION
      7          SELECT 'Alice', 'thimble' FROM DUAL UNION
      8          SELECT 'Alice', 'knife' FROM DUAL UNION
      9          SELECT 'Alice', 'cup' FROM DUAL UNION
    10          SELECT 'Joe', 'cup' FROM DUAL UNION
    11          SELECT 'Joe', 'saucer' FROM DUAL UNION
    12          SELECT 'Joe', 'plate' FROM DUAL UNION
    13          SELECT 'Joe', 'knife' FROM DUAL UNION
    14          SELECT 'Joe', 'fork' FROM DUAL UNION
    15          SELECT 'Joe', 'spoon' FROM DUAL UNION
    16          SELECT 'Jessica', 'spatula' FROM DUAL UNION
    17          SELECT 'Jessica', 'dish' FROM DUAL
    18  ), collections AS (
    19          SELECT 'crockery' collection_name, 'cup' item FROM DUAL UNION
    20          SELECT 'crockery', 'saucer' FROM DUAL UNION
    21          SELECT 'crockery', 'plate' FROM DUAL UNION
    22          SELECT 'cutlery', 'knife' FROM DUAL UNION
    23          SELECT 'cutlery', 'fork' FROM DUAL UNION
    24          SELECT 'cutlery', 'spoon' FROM DUAL
    25  ), person_item_colls AS (
    26          SELECT pi.person, pi.item, co.collection_name,
    27                 Count(*) OVER (PARTITION BY pi.person, co.collection_name) n_col
    28            FROM person_items pi
    29            LEFT JOIN collections co
    30              ON co.item = pi.item
    31  )
    32  select person, listagg(collection_name,',') within group (order by collection_name) as collections
    33  from (
    34        SELECT DISTINCT person, collection_name
    35        FROM   person_item_colls
    36        WHERE  collection_name IS NOT NULL
    37        AND    n_col > 1
    38        UNION ALL
    39        SELECT person, item
    40        FROM   person_item_colls
    41        WHERE  collection_name IS NULL
    42        OR     n_col = 1
    43       )
    44* group by person
    SQL> /
    PERSON  COLLECTIONS
    Alice   book,cup,knife,thimble
    Jessica dish,spatula
    Joe     crockery,cutlery
    Ted     crockery,forkFor 10g:
    SQL> ed
    Wrote file afiedt.buf
      1  WITH person_items AS (
      2          SELECT 'Ted' person, 'cup' item FROM DUAL UNION
      3          SELECT 'Ted', 'saucer' FROM DUAL UNION
      4          SELECT 'Ted', 'plate' FROM DUAL UNION
      5          SELECT 'Ted', 'fork' FROM DUAL UNION
      6          SELECT 'Alice', 'book' FROM DUAL UNION
      7          SELECT 'Alice', 'thimble' FROM DUAL UNION
      8          SELECT 'Alice', 'knife' FROM DUAL UNION
      9          SELECT 'Alice', 'cup' FROM DUAL UNION
    10          SELECT 'Joe', 'cup' FROM DUAL UNION
    11          SELECT 'Joe', 'saucer' FROM DUAL UNION
    12          SELECT 'Joe', 'plate' FROM DUAL UNION
    13          SELECT 'Joe', 'knife' FROM DUAL UNION
    14          SELECT 'Joe', 'fork' FROM DUAL UNION
    15          SELECT 'Joe', 'spoon' FROM DUAL UNION
    16          SELECT 'Jessica', 'spatula' FROM DUAL UNION
    17          SELECT 'Jessica', 'dish' FROM DUAL
    18  ), collections AS (
    19          SELECT 'crockery' collection_name, 'cup' item FROM DUAL UNION
    20          SELECT 'crockery', 'saucer' FROM DUAL UNION
    21          SELECT 'crockery', 'plate' FROM DUAL UNION
    22          SELECT 'cutlery', 'knife' FROM DUAL UNION
    23          SELECT 'cutlery', 'fork' FROM DUAL UNION
    24          SELECT 'cutlery', 'spoon' FROM DUAL
    25  ), person_item_colls AS (
    26          SELECT pi.person, pi.item, co.collection_name,
    27                 Count(*) OVER (PARTITION BY pi.person, co.collection_name) n_col
    28            FROM person_items pi
    29            LEFT JOIN collections co
    30              ON co.item = pi.item
    31  )
    32  select person, ltrim(sys_connect_by_path(collection_name,','),',') as collections
    33  from (
    34        select person, collection_name, row_number() over (partition by person order by collection_name) as rn
    35        from (
    36              SELECT DISTINCT person, collection_name
    37              FROM   person_item_colls
    38              WHERE  collection_name IS NOT NULL
    39              AND    n_col > 1
    40              UNION ALL
    41              SELECT person, item
    42              FROM   person_item_colls
    43              WHERE  collection_name IS NULL
    44              OR     n_col = 1
    45             )
    46        )
    47  where connect_by_isleaf = 1
    48  connect by person = prior person and rn = prior rn + 1
    49* start with rn = 1
    SQL> /
    PERSON  COLLECTIONS
    Alice   book,cup,knife,thimble
    Jessica dish,spatula
    Joe     crockery,cutlery
    Ted     crockery,fork

  • SQL Query : Getting specific datatype in select clause

    Hi
    I want to write one query that returns me the values inside a table based on the datatype of column(s) of the table. For e.g. I need only those columns of the table in select clause where the datatype of the column is VARCHAR.
    Can you please help me on this?

    Use the "user_tab_columns" Data Dictionary to get the columns and build the SQL Dynamically.
    Thanks,
    Karthick.

  • SQL Query Help: Average of Sums !

    Hi Folks !
    I've been tasked with wirting a program that queries Oracle DB. And I'm not used to SQL a lot. May be my question is very basic. Please bear with me.
    I've simplified the table structure for this question.
    The table Order has 4 fields:
    1. Order_id
    2. Trial_No.
    3. Response_Time.
    4. Order_Time
    Now the first two fields (Order_id, Trial_number) together make up the Primary Key (It is a composite key). My goal is to find the Average Response time for each Order ID in the past 10 minutes. Order_Time is the time at which Order was placed. An order can take more than one trail to complete the order. Order Reponse time is the sum of all the Trail response times.
    A basic query like this
    select AVG(Response_Time) from Order where Order_time < sysdate -10/1440.
    gives me the Average of the response time but here is the catch : It produces the Average no matter how many trials the Order had. An order's response time is SUM of all the Trail Response times it had.
    Consider the following data in the table
    Order_id Trial_No Resopnse_Time (ms)
    1 1 1000
    2 1 1000
    2 2 1000
    2 3 1000
    If I just use "select AVG(RESPONSE_Time), it will result in 1000ms. (4000/4).
    But in reality, Order 2 had taken 3000ms to complete (3 trials). And the Avg Order Response time should be (1000+3000)/2 = 2000ms. Can you see it?
    In other words, How do I calcluater the Avg of the sums of the rows, instead of Avg of all the rows. I've gone through some docs about 'group by' clause and 'subqueries', but don't seem to find the answer.
    Thanks very much for reading such a long post. Looking forward to some guideance.
    - K

    You'll want some analytics on this:
    SYS%xe> --select sum(sum_resp_time)/sum(rn) avg
    SYS%xe> --from (
    SYS%xe> with dataset as
      2  (select  1 Order_id, 1 Trial_No, 1000 Response_Time from dual union all
      3   select  2         , 1         , 1000 from dual union all
      4   select  2         , 2         , 1000 from dual union all
      5   select  2         , 3         , 1000 from dual
      6  )
      7  select order_id
      8  ,      response_time
      9  ,      row_number() over ( partition by order_id  order by order_id) rn
    10  ,      sum(response_time) over ( partition by order_id  order by order_id) sum_resp_time
    11  from dataset
    12  -- ) where rn = 1;
      ORDER_ID RESPONSE_TIME         RN SUM_RESP_TIME
             1          1000          1          1000
             2          1000          1          3000
             2          1000          2          3000
             2          1000          3          3000
    4 rijen zijn geselecteerd.
    Verstreken: 00:00:02.15
    SYS%xe> select sum(sum_resp_time)/sum(rn) avg
      2  from (
      3  with dataset as
      4  (select  1 Order_id, 1 Trial_No, 1000 Response_Time from dual union all
      5   select  2         , 1         , 1000 from dual union all
      6   select  2         , 2         , 1000 from dual union all
      7   select  2         , 3         , 1000 from dual
      8  )
      9  select order_id
    10  ,      response_time
    11  ,      row_number() over ( partition by order_id  order by order_id) rn
    12  ,      sum(response_time) over ( partition by order_id  order by order_id) sum_resp_time
    13  from dataset
    14  ) where rn = 1;
           AVG
          2000
    1 rij is geselecteerd.But you could do without them, as Raj showed.
    ( I guess this is one of my weirdest queries ;-) )
    Edited by: hoek on Apr 7, 2009 6:17 PM

  • Sql query help

    hi guys
    i have sample data as mentioned below... need to find the duplicate rows where cd=cd and dt1=dt1 and tm1 difference should be less than or equal to 4 hrs..
    i can get the data with the query written below but my problem is that i am not allowed to use in-built sql server function... can you help me in writing the same without using in-built function...
    CREATE TABLE #t (id INT,dt1 datetime, tm1 datetime,cd varchar(10))
    INSERT INTO #t VALUES (101,'2013-04-24','1900-01-01 12:20:00.000','TC')
    INSERT INTO #t VALUES (101,'2013-04-24','1900-01-01 12:30:00.000','TC')
    INSERT INTO #t VALUES (101,'2013-08-02','1900-01-01 14:30:00.000','MN')
    INSERT INTO #t VALUES (101,'2013-08-02','1900-01-01 15:07:00.000','MN')
    INSERT INTO #t VALUES (101,'2013-07-06','1900-01-01 09:07:00.000','XY')
    INSERT INTO #t VALUES (101,'2013-11-27','1900-01-01 09:50:00.000','LM')
    INSERT INTO #t VALUES (101,'2013-07-06','1900-01-01 15:07:00.000','XY')
    select * From #t
    WITH MyCTE (rn,id, dt1, tm1, cd)
    AS(
    select row_number() over (partition by id ORDER BY dt1, tm1) rn,* from #t
    select case when ((dt1 = lead_start_Date) and (ct <='4.0') and (base_cd = lead_cd)) then 'Duplicate_Req' else '' end dt123,* from
    select abs(convert(decimal(5,1),datediff(MI,lead_Start_time,tm1)/60.00)) ct, * from
    SELECT base.rn b_rn,LEAd.rn l_rn,BASE.id
    ,BASE.dt1
    ,BASE.tm1
    ,base.cd base_cd
    ,LEAD.dt1 LEAD_START_DATE
    ,LEAD.tm1 LEAD_START_TIME
    ,lead.cd lead_cd
    --,DATEADD(dd,-1,LEAD.dt1) EXPECTED_END_DATE
    FROM MyCTE BASE
    LEFT JOIN MyCTE LEAD ON BASE.id = LEAD.id
    AND BASE.rn = LEAD.rn+1
    ) b
    )c

    if this code will not work for you then not sure if there are any other options
    Converted the CTE into an actual temp table.
    CTE and barebones T-SQL code are included in the script below.
    CREATE TABLE #t (id INT,dt1 datetime, tm1 datetime,cd varchar(10))
    INSERT INTO #t VALUES (101,'2013-04-24','1900-01-01 12:20:00.000','TC')
    INSERT INTO #t VALUES (101,'2013-04-24','1900-01-01 12:30:00.000','TC')
    INSERT INTO #t VALUES (101,'2013-08-02','1900-01-01 14:30:00.000','MN')
    INSERT INTO #t VALUES (101,'2013-08-02','1900-01-01 15:07:00.000','MN')
    INSERT INTO #t VALUES (101,'2013-07-06','1900-01-01 09:07:00.000','XY')
    INSERT INTO #t VALUES (101,'2013-11-27','1900-01-01 09:50:00.000','LM')
    INSERT INTO #t VALUES (101,'2013-07-06','1900-01-01 15:07:00.000','XY')
    INSERT INTO #t VALUES (101,'2013-08-02','1900-01-01 15:07:00.000','MN')
    select * From #t
    ;WITH MyCTE (rn,id, dt1, tm1, cd)
    AS(
    select row_number() over (partition by id ORDER BY dt1, tm1) rn,* from #t
    select case when ((dt1 = lead_start_Date) and (ct <='4.0') and (base_cd = lead_cd)) then 'Duplicate_Req' else '' end dt123,* from
    select abs(convert(decimal(5,1),datediff(MI,lead_Start_time,tm1)/60.00)) ct, * from
    SELECT base.rn b_rn,LEAd.rn l_rn,BASE.id
    ,BASE.dt1
    ,BASE.tm1
    ,base.cd base_cd
    ,LEAD.dt1 LEAD_START_DATE
    ,LEAD.tm1 LEAD_START_TIME
    ,lead.cd lead_cd
    --,DATEADD(dd,-1,LEAD.dt1) EXPECTED_END_DATE
    FROM MyCTE BASE
    LEFT JOIN MyCTE LEAD ON BASE.id = LEAD.id
    AND BASE.rn = LEAD.rn+1
    ) b
    )c
    select * into #copy From #t order by id, cd, dt1, tm1
    alter table #copy add seqno int identity(1,1)
    select distinct y.id,y.cd,y.dt1,y.tm1,y.seqno,case when z.cd is not null then 'Duplicate_Req' else '' end dt123
    from #copy y
    left outer join
    (select a.id,a.cd,a.dt1,a.tm1
    From #copy a
    left outer join #copy b
    on a.id = b.id
    and a.cd = b.cd
    and a.dt1 = b.dt1
    where a.seqno > b.seqno
    and abs(datediff(MINUTE,b.tm1,a.tm1)) <= 240) z
    on y.id = z.id
    and y.cd = z.cd
    and y.dt1 = z.dt1
    and y.tm1 = z.tm1
    order by y.dt1,y.tm1
    drop table #copy
    drop table #t

  • SQL Query for Database Connections

    What would be the proper syntax or DBA table to query and find out how many database connections there are currently? Thanks for all of your help!!
    Marlan

    select * from v$session;Some entries in this view are dynamic processes (type = 'BACKGROUND') and you may want to exclude those depending on your requirements.

  • Urgent SQL query help

    Hello,
    I need help with SQL... My database version is Oracle 10g Release 1.2.
    I have two table with the exact same structure as follows...
    create table t1(cust_id number(5), zone_number number(2), part_number varchar2(10))
    create table t2(cust_id number(5), zone_number number(2), part_number varchar2(10))
    I need a query that would give me two counts per pairs of customer between t1 and t2..
    1.Count of part_number matches between the same zones in table 1 and table 2 for pairs of customers
    for Customer 1 and 10 for zone 1 this total shoulb be 2 because between cust 1 and 10 for Zone 1 there are two part number matches A and B.
    for Customer 1 and 10 for zone 2 this total shoulb be 0 because between cust 1 and 10 for Zone 2 there are no part number matches
    for Customer 1 and 20 for zone 1 this total shoulb be 0 because between cust 1 and 20 for Zone 1 there are no part number matches
    for Customer 1 and customer 20 zone 2 this total shoulb be 0 because between cust 1 and 20 for Zone 2 there is one part number matches , which is 'F'
    for Customer 1 and customer 20 zone 3 this total shoulb be 0 because there is no zone 3 for Customer 1
    same way
    .. cust 2 and cust 10 Zone 1 counts and zone2 counts
    .. for 2 and cust 20 zone 1, 2, and 3 counts
    2. Total unique Part nmbers between the same zones for pairs of customers in table 1 and table2
    for example
    unique part numbers between cust 1 and 10 for zone 1 are A,B and C so the count should be 3
    unique part numbers between cust 1 and 10 for zone 2 are B,F, D and E so the count should be 3
    unique part numbers between cust 1 and 20 for zone 1 are A,B,C and G so the count should be 4
    and so on so forth
    insert into t1 values(1, 1, 'A')
    insert into t1 values(1, 1, 'B')
    insert into t1 values(1, 1, 'C')
    insert into t1 values(1, 2, 'B')
    insert into t1 values(1, 2, 'F')
    insert into t1 values(1, 2, 'D')
    insert into t1 values(1, 2, 'E')
    insert into t1 values(2, 1, 'F')
    insert into t1 values(2, 2, 'G')
    insert into t1 values(2, 2, 'H')
    insert into t2 values(10, 1, 'A')
    insert into t2 values(10, 1, 'B')
    insert into t2 values(10, 2, null)
    insert into t2 values(20, 1, 'G')
    insert into t2 values(20, 2, 'F')
    insert into t2 values(20, 2, 'H')
    insert into t2 values(20, 3, 'I')
    insert into t2 values(20, 3, 'J')
    My query result should be as follows...
    cust1 cust2 zone pn_match_count total_unique_pn_count
    1 10 1 2 3
    1 10 2 0 4
    1 20 1 0 4
    1 20 2 1 5
    1 20 3 0 2
    2 10 1 0 3
    2 10 2 0 2
    2 20 1 0 2
    2 20 2 1 3
    2 20 3 0 2
    I would really appreciate your help in writing this query.
    Thanks in Advance

    user00 wrote:
    No, that doesn't do it... I get no results with this query becuase the Cust_id in table 1 and table 2 are not the same.Yeah, I only realised that after I posted my query. I had interpreted pairs as "matching pairs" when what you meant was "permutations".
    Cheers, APC
    blog: http://radiofreetooting.blogspot.com

  • SQL Query Help/ Converts seconds to day:hr:mi:se

    I have query that returns value in seconds. How i will convert those seconds in DAY:HOUR:MIN:SEC in the same query? What will be the mathematical formulae or alogorithim for this?
    Thanks
    Munis Warsi
    null

    Seriously, you post 750+ lines of unformatted SQL statement and a completely unreadable and unformatted explain plan and you expect people to be able to help with that?
    From what I can see it looks like some sort of query against an Oracle APPS database, and there are numerous calls to PL/SQL functions in there, so you're creating a multitude of context switches between the SQL and PL engines... that's known to cause performance problems.
    Take a read of the discussions linked in the FAQ: Re: 3. How to  improve the performance of my query? / My query is running slow.
    And also consider if your question would be better asked in the Oracle Apps forum space instead.

Maybe you are looking for