Reg: Complex query requirement-

Hi Experts,
I am having a query requirement which seems to be kind-of complex. Below I try to provide the pseudo-code:
-->>-- CASE (1)
IF EXISTS (
select new_amt
from table_stp stp
where stp.chng_dt = (
  select MAX(a.chng_dt)
  from table_stp stp
  where
   stp.chng_dt <= due_dt
   and stp.new_amt IS NOT NULL
-->>-- CASE (2)
ELSE IF EXISTS(
select old_amt
from table_stp stp
where stp.chng_dt = (
  select MIN(a.chng_dt)
  from table_stp stp
  where
   stp.chng_dt <= due_dt
   and stp.old_amt IS NOT NULL
ELSE 0
Some sample scenario -
LNO CHNG_DT  NEW_AMT OLD_AMT
1 12-01-2013 100  null
1 13-01-2013 200  666
1 14-01-2013 null 777
2 17-01-2013 null 555
2 18-01-2013 null 888
2 19-01-2013 null 999
Output should be:
1     13-01-2013     200      666 -->>-- case 1
2     17-01-2013     null     555 -->>-- case 2
Please let me know if you need any other clarification.
Could you please help me with this?
Help much appreciated.
Thanks,
Ranit
(on Oracle 11.2.0.3.0)

Hi Frank,
I guessed that my initial post will need some additional inputs. Let me try to describe my requirement more clearly:
Sample data --
with table_stp(LNO,CHNG_DT,NEW_AMT,OLD_AMT,col1,col2,col3,col4) as(
    select 1, TO_DATE('12-01-2013','dd-mm-yyyy'), 100, NULL, 11,12,13,14 from dual UNION ALL
    select 1, TO_DATE('13-01-2013','dd-mm-yyyy'), 200, 666, 21,22,23,24 from dual UNION ALL
    select 1, TO_DATE('14-01-2013','dd-mm-yyyy'), NULL, 777, 31,32,33,34 from dual UNION ALL
    select 2, TO_DATE('17-01-2013','dd-mm-yyyy'), NULL, 555, 41,42,43,44 from dual UNION ALL
    select 2, TO_DATE('18-01-2013','dd-mm-yyyy'), NULL, 888, 51,52,53,54 from dual UNION ALL
    select 2, TO_DATE('19-01-2013','dd-mm-yyyy'), NULL, 999, 61,62,63,64 from dual    
select *
from table_stp;
My expected output --
1     13-01-2013     200      666     21     22     23     24 -->>-- case 1
2     17-01-2013     null     555     41     42     43     44 -->>-- case 2
Logic --
(1) First, we need to check if Case - 1 satisfies or not.
(1.1) If Yes, do some task.
(1.2) If Not, check if Case - 2 satisfies or not.
     (1.2.1) If Yes, do some task.
     (1.2.2) If Not, set value = 0
Case - 1)
First, all records with "NEW_AMT" as null are eliminated and we need to fetch the value "NEW_AMT" with maximum "CHNG_DT".
So, first output record is scenario Case - 1.
Case - 2)
If all values for a LNO is null for column "NEW_AMT", we need to look into column "OLD_AMT" for the value with minimum "CHNG_DT"
Second output record lies here, because - all record values for column "NEW_AMT" is null, we need to consider column "OLD_AMT" for values,
Still, if all values in OLD_AMT is null, set = 0
Hope this gives a better understanding, else please let me know.

Similar Messages

  • EJB-QL---  Complex Query --- Two Entites

    hi
    Can i write Complex Query in EJB-QL
    between two entities...
    have any buddy wrote the same....
    i badly require the same...
    bye
    RAJ

    Raj -- OC4J will support EJB-QL soon but not yet. You can look at
    Re: Data Integrity
    for more details.
    Now, as for complex query, you may still be able to do this in the current version through the orion-ejb-jar.xml. You can
    include complex SQL there in the finder methods.
    What exactly do you need to do?
    later -- Jeff
    hi
    Can i write Complex Query in EJB-QL
    between two entities...
    have any buddy wrote the same....
    i badly require the same...
    bye
    RAJ

  • Complex query design suggestions

    Hi, I should first of all point out I'm new to pl/sql and struggling a bit so any help you can provide is really appreciated.
    I have the requirements for a complex query the conditions of which are as follows
    Four tables involved
    ProductGroups, Products, Stock, StockMovements
    Query requirements psudeocode (broken into bits to make things easier)
    /* CODE */
    Select distinct products
    where productgroup.group between 'a' and 'z'
    And stock.location = 'x'
    And stock.qty > 0
    For each product
         _myDate = currentdate - 1 year
         stkMvt= Select * from StockMovements where product = product
         If(select count(*) from stkMvt where code = 'A' and type = 'A' and source = 'A' and stkMvt.date > _myDate) > 0)
              -- exclude row / move next product
         End If
         If (select count(*) from stkMvt where code = 'B' and type = 'B' and source = 'B' and stkMvt.date> _myDate) > 0)
              -- exclude row / move next product
         End If
         If (select count(*) from stkMvt where code = 'C' and type = 'C' and source = 'C' and Qty > 0 and stkMvt.date> _myDate) > 0)
              -- exclude row / move next product
         End If
         If (select max(stkMvt.date) from stkMvt where code = 'D' and type = 'D' and source = 'D' < _myDate)
              If ( select max(stkMvt.date) from stkMvt where ((code = 'E' and type = 'E' and source 'E')
                   Or (code = 'F' and type = 'F' and source = 'F')
                   Or (code = 'G' and type = 'G' and source = 'G')) > _myDate )
                   -- exclude row / move next product
              End If
         End If
         -- Get the fields to return
         Qty1 = Select coalesce(sum(qty),0) from stkMvt where code = 'H' and type = 'H' and source = 'H'
         Qty2 = Select coalesce(sum(qty),0) from stkMvt where code = 'I' and type = 'I' and source = 'I'
         Qty3 = Select coalesce(sum(qty),0) from stkMvt where code = 'J' and type = 'J' and source = 'J' and stkMvt.date between :fromDate and :toDate
         LastDate = Select max(stkMvt.Date) from stkMvt
         StkQty = Select Qty from Stock where product = product
         AllQty = Select AllQty from Stock where product = product
         FreeQty = StkQty - AllQty
         Value = Select value from Stock
         Select group, product , Qty1, Qty2, Qty3, LastDate, StkQty, AllQty, FreeQty, Value INTO table/cursor
    Loop
    Return table / cursor
    /* CODE END */
    Any guidance about the best way to achieve the above in an SP or Package would be massively helpful,
    Thanks in advance
    Scott.

    Agreed, it is a mess and I was looking the other way when it was dumped into my lap to deal with unfortunately. Any pointers in the right direction would really be helping me out.
    ok first the table structures, I'll include only the relevant fields to make things a bit easier.
    CREATE TABLE "TEST"."CMGROUP"
    (     "CMGRP_GROUP" CHAR(4 BYTE),
         "CMGRP_DESC" CHAR(30 BYTE)
    CREATE TABLE "TEST"."CMPROD"
    (     "CMP_PRODUCT" CHAR(20 BYTE),
         "CMP_DESC" CHAR(50 BYTE),
         "CMP_GROUP" CHAR(4 BYTE),
         "CMP_SPECIAL" CHAR(1 BYTE)
    CREATE TABLE "TEST"."STOCK"
         "STK_PRODUCT" CHAR(20 BYTE),
         "STK_LOC" CHAR(5 BYTE),
         "STK_STKQTY" NUMBER,
         "STK_VALUE" NUMBER,
         "STK_ALLSTK" NUMBER
    CREATE TABLE "TEST"."STMOVE"
         "STMOV_LOC" CHAR(5 BYTE),
         "STMOV_PRODUCT" CHAR(20 BYTE),
         "STMOV_DATE" DATE,
         "STMOV_TYPE" CHAR(1 BYTE),
         "STMOV_SOURCE" CHAR(1 BYTE),
         "STMOV_CODE" CHAR(1 BYTE),
         "STMOV_QTY" NUMBER,
         "STMOV_YEAR" NUMBER(5,0),
         "STMOV_PERIOD" NUMBER(5,0)
    Relationships are as follows
    CMGROUP.CMGRP = CMPROD.CMP_GROUP (One to Many)
    CMPROD.CMP_PRODUCT = STOCK.STK_PRODUCT (One to Many)
    STOCK.STK_LOC = STMOVE.STMOV_LOC (Many to Many)
    STOCK.STK_PRODUCT = STMOVE.STMOV_PRODUCT (Many to Many)
    As for the requirements well they aren't straightforward but the gist of it is to return a ref cursor to a crystal report from an oracle package. The ref cursor is to contain the following
    select products that are
    1) In stock
    2) For a specific location
    3) In a range of product groups
    4) That either have a manual stock receipt movement within the last 12 months
    5) Or do not have the following stock movement within the last 12 months
         a. PO Receipt
         b. WO Receipt
         c. Stock Acquisition Receipt
    Of the results I need to
         1) Display the group
         2) Display the product
         3) Sum the Qty of WO Receipts from the 1st of the month (13 Months Ago) until today
         4) Sum the Qty of PO Receipts from the 1st of the month (13 Months Ago) until today
         5) Sum the Qty of Stock Transfers from the 1st of the month (13 Months Ago) until today
         6) Display the most recent stock movement date
         7) Display the current stock quantity
         8) Display the allocated stock quantity
         9) Display the available stock quantity
         10) Display the stock value
    Movement code definitions as follows     
    Manual Stock Receipt
    Stmov_type: O
    Stmov_source: J
    Stmov_code: G
    Purchase Order Goods Receipt
    Stmov_type: O
    Stmov_source: R
    Stmov_code: S
    Stock Requisition Receipt (Positive stmov_qty value)
    Stmov_type: G
    Stmov_source: J
    Stmov_code: L
    Stock Requisition Issue (Negative stmov_qty value)
    Stmov_type: G
    Stmov_source: J
    Stmov_code: L
    Manual Stock Issue to GL Account (Issue to workshop)
    Stmov_type: F
    Stmov_source: J
    Stmov_code: G
    Works order issue
    Stmov_type: F
    Stmov_source: W
    Stmov_code: G
    Works order receipt
    Stmov_type: 1
    Stmov_source: W
    Stmov_code: G
    There are a few other conditions and requirements but I think that covers the basics. If there is anything I've left out let me know and I do my best to provide.
    Thanks in advance
    Scott.

  • How to create an explain plan with rowsource statistics for a complex query that include multiple table joins ?

    1. How to create an explain plan with rowsource statistics for a complex query that include multiple table joins ?
    When multiple tables are involved , and the actual number of rows returned is more than what the explain plan tells. How can I find out what change is needed  in the stat plan  ?
    2. Does rowsource statistics gives some kind of  understanding of Extended stats ?

    You can get Row Source Statistics only *after* the SQL has been executed.  An Explain Plan midway cannot give you row source statistics.
    To get row source statistics either set STATISTICS_LEVEL='ALL'  in the session that executes theSQL OR use the Hint "gather_plan_statistics"  in the SQL being executed.
    Then use dbms_xplan.display_cursor
    Hemant K Chitale

  • Complex query

    I am novice in PL/Sql. I need some help in writing a complex query.
    I imagine the following table structure.
    Type(string) Date(date) count(int)
    Given a date range
    The query needs to group the records on type and return the record (type and count) which has the max date (its just date, no time is involved) for each group (which is based on type) . If there are more than one records which have the max date then the average count should be returned for that type
    i would be glad if someone could give any ideas as to how to go about this query. Thanking you in advance.
    regards.

    Heres the query ... Forget the period .... wht this query is supposed to do is group on assigned ki for a given date range. then it has to get the value which is for the last record for that Ki in the date range. If there are 2 records which have max date then it should give an average.
    e.g
    assignedKI / date / value
    a 1st may 2008 10
    b 2nd may 2008 12
    c 1st may 2008 13
    a 30 - apr-2008 16
    b 4th may 2008 17
    a 1st may 2008 20
    The query should return
    a 1st may 2008 15 (which is the average as there are 2 values for the max date for a)
    b 4th may 2008 17
    c 1st may 2008 13
    the following query doesnot work ....
    SELECT
    kiv2.assigned_k_i,
    kiv2.ki_name,
    kiv.period,
    max( kiv2.ki_value_date) ,
    avg(kiv2.ki_value)
    FROM
    SELECT
    assigned_k_i,
    period p1,
    TO_CHAR(ki_value_date, period) period,
    MAX(ki_value_date) ki_value_date
    FROM
    v_ki_value,
    (select ? period from dual)
         WHERE
         (status = 'APPROVED' OR status = 'AUTOAPPROVED')
    AND ( trunc(to_date(to_char(ki_value_date, 'DD/MM/YYYY'), 'DD/MM/YYYY')) >= ?)
    AND ( trunc(to_date(to_char(ki_value_date, 'DD/MM/YYYY'), 'DD/MM/YYYY')) &lt;= ?)
    AND (INSTR(?, TO_CHAR(assigned_k_i)) > 0)
    GROUP BY
    assigned_k_i,
    TO_CHAR(ki_value_date, period)
    ) kiv,
    v_ki_value kiv2
    WHERE
    kiv.assigned_k_i = kiv2.assigned_k_i
    AND to_char(kiv.ki_value_date, kiv.p1) = to_char(kiv2.ki_value_date, kiv.p1)
    GROUP BY
    kiv2.assigned_k_i,
    kiv2.ki_name,
    kiv.period,
    kiv2.ki_value
    ORDER BY
    kiv2.assigned_k_i

  • How to bind local variables in complex query in PL/SQL

    Hi
    I have long complex query with local varibales; when I run in Dynamic SQL I get an error. Not sure which is the easiest way to bind local variables.
    L_QUERY := q'[select m.segment1 col1,
          '1' col2,
          '13' col3,
          l.operand col4,
          0 col5,
           'Y' col8,
          'N' col9,
          'N' col10,
       decode(h.name,'09_UKOR_*','EOS Credit','10_UKOR_*','TopUp','11_UKOR_*','Main') col18
    from qp_list_headers_v h,
          qp_list_lines_v l,
          mtl_system_items m
    where h.name in ('09_UKOR_*','10_UKOR_*','11_UKOR_*')
    and h.list_header_id = l.list_header_id
    and m.inventory_item_id = l.product_attr_value
    and m.organization_id  = 84
    UNION all
    SELECT qs.PRODUCT_ATTR_VALUE col1,
           hca.account_number col2,
           decode (su.site_use_code,'BILL_TO','21','SHIP_TO','18') col3,
           0 col4,
           qs.operand col5,
           null col6,
           null col7,
           'N' col8,
           'Y' col9,
           'N' col10,     
    --Local variables
          (case when (trunc(nvl(qq.start_date_active,sysdate)) between l_cur_year_from  and l_cur_year_to) and  
                      ( trunc(nvl(qq.end_date_active,l_cur_year_to)) >= trunc(l_cur_year_to) )  then    'TopUp'
                when (trunc(qq.start_date_active) between l_next_year_from  and l_next_year_to) and  
                      ( trunc(nvl(qq.end_date_active,l_next_year_to)) >= l_next_year_to)  then   'Main'              
                when (trunc(qq.start_date_active) between l_last_year_from  and l_last_year_to) and  
                      ( trunc(nvl(qq.end_date_active,l_last_year_to)) >= l_last_year_to )  then  'EOS Return'
           end )col18,
    --Local variables
           (case   when (trunc(qq.start_date_active) between l_next_year_from  and l_next_year_to) and  
                      ( trunc(nvl(qq.end_date_active,l_next_year_to)) >= l_cur_year_to )  then   'N'
              else
                    'Y'  end ) col21
       FROM qp.qp_list_headers_b qlhb,
            qp.qp_list_headers_tl qlht,
            qp.qp_qualifiers qq,
            qp_modifier_summary_v qs,
            hz_cust_site_uses_all su,
            hz_cust_acct_sites_all  sa,
            hz_cust_accounts hca
    WHERE 1=1
          and qlhb.LIST_TYPE_CODE       = 'DLT'
          and nvl(qlhb.active_flag,'Y') = 'Y'
          and qlhb.list_header_id       = qlht.list_header_id
          AND qq.list_header_id         = qlhb.list_header_id
          and qq.list_type_code         = qlhb.LIST_TYPE_CODE
          and qq.QUALIFIER_CONTEXT      = 'CUSTOMER'
          and qs.list_header_id         = qlhb.list_header_id
          and qs.LIST_LINE_TYPE_CODE    = 'DIS'
          and su.site_use_id            = qq.qualifier_attr_value --1064
          AND  su.cust_acct_site_id     = sa.cust_acct_site_id
          AND  sa.cust_account_id       = hca.cust_account_id ]';
    --call Dynamic SQL function
    l_cursor := DBMS_SQL.OPEN_CURSOR;
    DBMS_SQL.PARSE(l_cursor, p_QUERY , DBMS_SQL.NATIVE);
    l_rows := DBMS_SQL.EXECUTE(l_cursor);
    Any help will be much appreciated.
    iI guess I should use DBMS_SQL.BIND_VARIABLE to bind all variables seperately so not to mess with query

    1) What is the error you get?
    2) If you use bind variables inside a query, you should prefix them with colons, so use :l_cur_year_from etc.
    3) Why are you using dbms_sql instead of native dynamic sql and/or ref-cursors?
    Toon

  • Trying to form complex query - need help

    I have a fairly complex query that I need to join the results of to show actual and goal by day. The actuals are an aggregation of records that get put in every day, while the targets are a single entry in range format indicating an active range for which the target applies. I'm working on a query that will put things together by month and I'm running into a snag. Can someone please point out where appropriate naming needs to go to get this to come together?
    This one works:
    (select DATE_INDEX, SUM(LDS) as TTLLDS, SUM(TONS) as TTLTONS from
        (select DATE_INDEX, VEH_LOC, SUM(LDS) as LDS, SUM(WT) as TONS from
           (select c.DATE_INDEX, c.VEH_LOC, COUNT(j.LOAD_JOB_ID) as LDS,
                 CASE WHEN SUM(w.SPOT_WEIGHT) = 0 THEN SUM(j.MAN_SPOT_WT)
                      ELSE SUM(w.SPOT_WEIGHT)
                  END as WT
              from TC c, TC_LOAD_JOBS j, LOAD_RATES r, SPOT_WEIGHTS w
             where c.TC_ID = j.TC_ID and j.LOAD_RATE_ID = r.LOAD_RATE_ID
               and c.DATE_INDEX = w.DATE_INDEX and j.LOAD_RATE_ID = w.LOAD_RATE_ID
               and c.VEH_LOC in (select ORG_ID from ORG_ENTITIES where MNG_ORG_ID = 200)
               and c.DATE_INDEX between to_date('08/01/2010','MM/DD/YYYY') and to_date('07/31/2011','MM/DD/YYYY')
             group by c.DATE_INDEX, c.VEH_LOC
            union
            select c.DATE_INDEX, c.VEH_LOC, COUNT(j.JOB_ID) as LDS,
                 DECODE(SUM(j.AVG_SPOT_WEIGHT),0,SUM(r.BID_TONS),SUM(j.AVG_SPOT_WEIGHT)) as WT
              from TC_3RDPARTY c, TC_3RDPARTY_JOBS j, LOAD_RATES r
             where c.TC_ID = j.TC_ID and j.LOAD_RATE_ID = r.LOAD_RATE_ID
               and c.DATE_INDEX between to_date('08/01/2010','MM/DD/YYYY') and to_date('07/31/2011','MM/DD/YYYY')
               and j.FACTORY_ID in (select ORG_ID from ORG_ENTITIES where MNG_ORG_ID = 200)
             group by c.DATE_INDEX, c.VEH_LOC)
          group by DATE_INDEX, VEH_LOC)
      group by DATE_INDEX)Now I need to add in the following query:
    select (u.MACH_TPH_D+u.MACH_TPH_N)/2 as MTPH_TGT, (u.LABOR_TPH_D+u.LABOR_TPH_N)/2 as LTPH_TGT
         from UTIL_TARGET_LOADERS u
        where u.ORG_ID in (select ORG_ID from ORG_ENTITIES where MNG_ORG_ID = 200)The join needs to be based on VEH_LOC and DAY in the form:
       ... WHERE u.ORG_ID = x.VEH_LOC
              AND x.DATE_INDEX between u.START_DATE and NVL(u.END_DATE,sysdate)I had one that worked just fine when only one entity was involved; the complication arises in that this is a division-level report so I have to individually resolve the subordinates and their goals before I can aggregate. This is one of two queries I need to tie together using a WITH clause so I can pivot the whole thing and present it in month-by-month fashion. When I try to tie it together like the query below, I get: invalid relational operator.
    select ttls.DATE_INDEX, SUM(ttls.LDS) as TTLLDS, SUM(ttls.TONS) as TTLTONS, u.TARGET_LTPH, u.TARGET_MTPH
      from UTIL_TARGET_LOADERS u,
        (select DATE_INDEX, VEH_LOC, SUM(LDS) as LDS, SUM(WT) as TONS from
           (select c.DATE_INDEX, c.VEH_LOC, COUNT(j.LOAD_JOB_ID) as LDS,
                 CASE WHEN SUM(w.SPOT_WEIGHT) = 0 THEN SUM(j.MAN_SPOT_WT)
                      ELSE SUM(w.SPOT_WEIGHT)
                  END as WT
              from TC c, TC_LOAD_JOBS j, LOAD_RATES r, SPOT_WEIGHTS w
             where c.TC_ID = j.TC_ID and j.LOAD_RATE_ID = r.LOAD_RATE_ID
               and c.DATE_INDEX = w.DATE_INDEX and j.LOAD_RATE_ID = w.LOAD_RATE_ID
               and c.VEH_LOC in (select ORG_ID from ORG_ENTITIES where MNG_ORG_ID = 200)
               and c.DATE_INDEX between to_date('08/01/2010','MM/DD/YYYY') and to_date('07/31/2011','MM/DD/YYYY')
             group by c.DATE_INDEX, c.VEH_LOC
            union
            select c.DATE_INDEX, c.VEH_LOC, COUNT(j.JOB_ID) as LDS,
                 DECODE(SUM(j.AVG_SPOT_WEIGHT),0,SUM(r.BID_TONS),SUM(j.AVG_SPOT_WEIGHT)) as WT
              from TC_3RDPARTY c, TC_3RDPARTY_JOBS j, LOAD_RATES r
             where c.TC_ID = j.TC_ID and j.LOAD_RATE_ID = r.LOAD_RATE_ID
               and c.DATE_INDEX between to_date('08/01/2010','MM/DD/YYYY') and to_date('07/31/2011','MM/DD/YYYY')
               and j.FACTORY_ID in (select ORG_ID from ORG_ENTITIES where MNG_ORG_ID = 200)
             group by c.DATE_INDEX, c.VEH_LOC)
          group by DATE_INDEX, VEH_LOC) ttls
        where ttls.DATE_INDEX beween u.START_DATE and NVL(u.END_DATE,sysdate)
          and ttls.VEH_LOC = u.ORG_ID
      group by ttls.DATE_INDEXI know this is a nested mess, as it has to grab the production from two tables for a range of VEH_LOC values and sum and aggregate by day and VEH_LOC, then I have to try and match that to the targets based on VEH_LOC and day. My final query is to aggregate the whole mess of sums and averages by month.
    I'd appreciate it if someone can point me in the right direction.

    Figured it out.
    select ttl.DATE_INDEX, SUM(ttl.LDS) as TTLLDS, SUM(ttl.TONS) as TTLTONS,
         AVG((u.MACH_TPH_D+u.MACH_TPH_N)/2) as MTPH_TGT,
         AVG((u.LABOR_TPH_D+u.LABOR_TPH_N)/2) as LTPH_TGT
      from
        (select DATE_INDEX, VEH_LOC, SUM(LDS) as LDS, SUM(WT) as TONS from
           (select c.DATE_INDEX, c.VEH_LOC, COUNT(j.LOAD_JOB_ID) as LDS,
                 CASE WHEN SUM(w.SPOT_WEIGHT) = 0 THEN SUM(j.MAN_SPOT_WT)
                      ELSE SUM(w.SPOT_WEIGHT)
                  END as WT
              from TC c, TC_LOAD_JOBS j, LOAD_RATES r, SPOT_WEIGHTS w
             where c.TC_ID = j.TC_ID and j.LOAD_RATE_ID = r.LOAD_RATE_ID
               and c.DATE_INDEX = w.DATE_INDEX and j.LOAD_RATE_ID = w.LOAD_RATE_ID
               and c.VEH_LOC in (select ORG_ID from ORG_ENTITIES where MNG_ORG_ID = 200)
               and c.DATE_INDEX between to_date('08/01/2010','MM/DD/YYYY') and to_date('07/31/2011','MM/DD/YYYY')
             group by c.DATE_INDEX, c.VEH_LOC
            union
            select c.DATE_INDEX, c.VEH_LOC, COUNT(j.JOB_ID) as LDS,
                 DECODE(SUM(j.AVG_SPOT_WEIGHT),0,SUM(r.BID_TONS),SUM(j.AVG_SPOT_WEIGHT)) as WT
              from TC_3RDPARTY c, TC_3RDPARTY_JOBS j, LOAD_RATES r
             where c.TC_ID = j.TC_ID and j.LOAD_RATE_ID = r.LOAD_RATE_ID
               and c.DATE_INDEX between to_date('08/01/2010','MM/DD/YYYY') and to_date('07/31/2011','MM/DD/YYYY')
               and j.FACTORY_ID in (select ORG_ID from ORG_ENTITIES where MNG_ORG_ID = 200)
             group by c.DATE_INDEX, c.VEH_LOC)
          group by DATE_INDEX, VEH_LOC) ttl, UTIL_TARGET_LOADERS u
      where u.ORG_ID = ttl.VEH_LOC
        and ttl.DATE_INDEX between u.START_DATE and NVL(U.END_DATE,sysdate)
      group by ttl.DATE_INDEX, (u.LABOR_TPH_D+u.LABOR_TPH_N)/2

  • Need complex query  with joins and AGGREGATE  functions.

    Hello Everyone ;
    Good Morning to all ;
    I have 3 tables with 2 lakhs record. I need to check query performance.. How CBO rewrites my query in materialized view ?
    I want to make complex join with AGGREGATE FUNCTION.
    my table details
    SQL> select from tab;*
    TNAME TABTYPE CLUSTERID
    DEPT TABLE
    PAYROLL TABLE
    EMP TABLE
    SQL> desc emp
    Name
    EID
    ENAME
    EDOB
    EGENDER
    EQUAL
    EGRADUATION
    EDESIGNATION
    ELEVEL
    EDOMAIN_ID
    EMOB_NO
    SQL> desc dept
    Name
    EID
    DNAME
    DMANAGER
    DCONTACT_NO
    DPROJ_NAME
    SQL> desc payroll
    Name
    EID
    PF_NO
    SAL_ACC_NO
    SALARY
    BONUS
    I want to make  complex query  with joins and AGGREGATE  functions.
    Dept names are : IT , ITES , Accounts , Mgmt , Hr
    GRADUATIONS are : Engineering , Arts , Accounts , business_applications
    I want to select records who are working in IT and ITES and graduation should be "Engineering"
    salary > 20000 and < = 22800 and bonus > 1000 and <= 1999 with count for males and females Separately ;
    Please help me to make a such complex query with joins ..
    Thanks in advance ..
    Edited by: 969352 on May 25, 2013 11:34 AM

    969352 wrote:
    why do you avoid providing requested & NEEDED details?I do NOT understand what do you expect ?
    My Goal is :
    1. When executing my own query i need to check expalin plan.please proceed to do so
    http://docs.oracle.com/cd/E11882_01/server.112/e26088/statements_9010.htm#SQLRF01601
    2. IF i enable query rewrite option .. i want to check explain plan ( how optimizer rewrites my query ) ? please proceed to do so
    http://docs.oracle.com/cd/E11882_01/server.112/e16638/ex_plan.htm#PFGRF009
    3. My only aim is QUERY PERFORMANCE with QUERY REWRITE clause in materialized view.It is an admirable goal.
    Best Wishes on your quest for performance improvements.

  • Complex Query in toplink descriptor

    I have a complex query with "Order by" and "Max" aggregation function and I am trying to convert it to a named query. I am using toplink descriptor in Jdeveloper 11G.
    1. Is it possible to write a named query which returns values from more than two different table?
    2. how to specify Max operation in the Toplink descriptor.
    Here is my Query
    select * from table1 t1 ,table2 t2
    where
    t1.id  = t2.id  and
    t1.name ='Name' and
    t1.status<>'DELETE' and
    t2.a_id = (select max(a_id) from table2 t21 where
    t21.a_id = t1.id and
    group by id)

    TopLink supports sub-selects through sub-queries in TopLink Expressions, and through JPQL. I'm not sure on the JDev support though, you may need to use a code customizer or amendment to add the named query.
    James : http://www.eclipselink.org

  • Complex Query which needs tuning

    Hello :
    I have a complex query that needs to be tuned. I have little experience in tuning the sql and hence taking the help of your guys.
    The Query is as given below:
    Database version 11g
    SELECT DISTINCT P.RESPONSIBILITY, P.PRODUCT_MAJOR, P.PRODUCT_MINOR,
    P.PRODUCT_SERIES, P.PRODUCT_CATEGORY AS Category1, SO.REGION_CODE,
    SO.STORE_CODE, S.Store_Name, SOL.PRODUCT_CODE, PRI.REPLENISHMENT_TYPE,
    PRI.SUPPLIER_CODE,
    SOL.SOLD_WITH_NIC, SOL.SUGGESTED_PRICE,
    PRI.INVOICE_COST, SOL.FIFO_COST,
    SO.ORDER_TYPE_CODE, SOL.DOCUMENT_NUM,
    SOS.SLSP_CD, '' AS FNAME, '' AS LNAME,
    SOL.PRICE_EXCEPTION_CODE, SOL.AS_IS,
    SOL.STATUS_DATE,
    Sum(SOL.QUANTITY) AS SumOfQUANTITY,
    Sum(SOL.EXTENDED_PRICE) AS SumOfEXTENDED_PRICE
    --Format([SALES_ORDER].[STATUS_DATE],"mmm-yy") AS [Month]
    FROM PRODUCT P,
    PRODUCT_MAJORS PM,
    SALES_ORDER_LINE SOL,
    STORE S,
    SALES_ORDER SO,
    SALES_ORDER_SPLITS SOS,
    PRODUCT_REGIONAL_INFO PRI,
    REGION_MAP R
    WHERE P.product_major = PM.PRODUCT_MAJOR
    and SOL.PRODUCT_CODE = P.PRODUCT_CODE
    and SO.STORE_CODE = S.STORE_CODE
    AND SO.REGION_CODE = S.REGION_CODE
    AND SOL.REGION_CODE = SO.REGION_CODE
    AND SOL.DOCUMENT_NUM = SO.DOCUMENT_NUM
    AND SOL.DELIVERY_SEQUENCE_NUM = SO.DELIVERY_SEQUENCE_NUM
    AND SOL.STATUS_CODE = SO.STATUS_CODE
    AND SOL.STATUS_DATE = SO.STATUS_DATE
    AND SO.REGION_CODE = SOS.REGION_CODE
    AND SO.DOCUMENT_NUM = SOS.DOCUMENT_NUM
    AND SOL.PRODUCT_CODE = PRI.PRODUCT_CODE
    AND PRI.REGION_CODE = R.CORP_REGION_CODE
    AND SO.REGION_CODE = R.DS_REGION_CODE
    AND P.PRODUCT_MAJOR In ('STEREO','TELEVISION','VIDEO')
    AND SOL.STATUS_CODE = 'D'
    AND SOL.STATUS_DATE BETWEEN '01-JUN-09' AND '30-JUN-09'
    AND SO.STORE_CODE NOT IN
    ('10','20','30','40','70','91','95','93','94','96','97','98','99',
    '9V','9W','9X','9Y','9Z','8Z',
    '8Y','92','CZ','FR','FS','FT','FZ','FY','FX','FW','FV','GZ','GY','GU','GW','GV','GX')
    GROUP BY
    P.RESPONSIBILITY, P.PRODUCT_MAJOR, P.PRODUCT_MINOR, P.PRODUCT_SERIES, P.PRODUCT_CATEGORY,
    SO.REGION_CODE, SO.STORE_CODE, /*S.Short Name, */
    S.Store_Name, SOL.PRODUCT_CODE,
    PRI.REPLENISHMENT_TYPE, PRI.SUPPLIER_CODE,
    SOL.SOLD_WITH_NIC, SOL.SUGGESTED_PRICE, PRI.INVOICE_COST,
    SOL.FIFO_COST, SO.ORDER_TYPE_CODE, SOL.DOCUMENT_NUM,
    SOS.SLSP_CD, '', '', SOL.PRICE_EXCEPTION_CODE,
    SOL.AS_IS, SOL.STATUS_DATE
    Explain Plan:
    SELECT STATEMENT, GOAL = ALL_ROWS               Cost=583     Cardinality=1     Bytes=253
    HASH GROUP BY               Cost=583     Cardinality=1     Bytes=253
    FILTER                         
    NESTED LOOPS               Cost=583     Cardinality=1     Bytes=253
    HASH JOIN OUTER               Cost=582     Cardinality=1     Bytes=234
    NESTED LOOPS                         
    NESTED LOOPS               Cost=571     Cardinality=1     Bytes=229
    NESTED LOOPS               Cost=571     Cardinality=1     Bytes=207
    NESTED LOOPS               Cost=569     Cardinality=2     Bytes=368
    NESTED LOOPS               Cost=568     Cardinality=2     Bytes=360
    NESTED LOOPS               Cost=556     Cardinality=3     Bytes=435
    NESTED LOOPS     Cost=178     Cardinality=4     Bytes=336
    NESTED LOOPS          Cost=7     Cardinality=1     Bytes=49
    HASH JOIN               Cost=7     Cardinality=1     Bytes=39
    VIEW     Object owner=CORP     Object name=index$_join$_015     Cost=2     Cardinality=3     Bytes=57
    HASH JOIN                         
    INLIST ITERATOR                         
    INDEX UNIQUE SCAN     Object owner=CORP     Object name=PRODMJR_PK     Cost=0     Cardinality=3     Bytes=57
    INDEX FAST FULL SCAN     Object owner=CORP     Object name=PRDMJR_PR_FK_I     Cost=1     Cardinality=3     Bytes=57
    VIEW     Object owner=CORP     Object name=index$_join$_016     Cost=4     Cardinality=37     Bytes=740
    HASH JOIN                         
    INLIST ITERATOR                         
    INDEX RANGE SCAN     Object owner=CORP     Object name=PRDMNR1     Cost=3     Cardinality=37     Bytes=740
    INDEX FAST FULL SCAN     Object owner=CORP     Object name=PRDMNR_PK     Cost=4     Cardinality=37     Bytes=740
    INDEX UNIQUE SCAN     Object owner=CORP     Object name=PRODMJR_PK     Cost=0     Cardinality=1     Bytes=10
    MAT_VIEW ACCESS BY INDEX ROWID     Object owner=CORP     Object name=PRODUCTS     Cost=171     Cardinality=480     Bytes=16800
    INDEX RANGE SCAN     Object owner=CORP     Object name=PRD2     Cost=3     Cardinality=681     
    TABLE ACCESS BY INDEX ROWID     Object owner=DS     Object name=SALES_ORDER_LINE     Cost=556     Cardinality=1     Bytes=145
    BITMAP CONVERSION TO ROWIDS                         
    BITMAP INDEX SINGLE VALUE     Object owner=DS     Object name=SOL2               
    TABLE ACCESS BY INDEX ROWID     Object owner=DS     Object name=SALES_ORDER     Cost=4     Cardinality=1     Bytes=35
    INDEX RANGE SCAN     Object owner=DS     Object name=SO1     Cost=3     Cardinality=1     
    TABLE ACCESS BY INDEX ROWID     Object owner=DS     Object name=REGION_MAP     Cost=1     Cardinality=1     Bytes=4
    INDEX RANGE SCAN     Object owner=DS     Object name=REGCD     Cost=0     Cardinality=1     
    MAT_VIEW ACCESS BY INDEX ROWID     Object owner=CORP     Object name=PRODUCT_REGIONAL_INFO     Cost=2     Cardinality=1     Bytes=23
    INDEX UNIQUE SCAN     Object owner=CORP     Object name=PRDRI_PK     Cost=1     Cardinality=1     
    INDEX UNIQUE SCAN     Object owner=CORP     Object name=BI_STORE_INFO_PK     Cost=0     Cardinality=1     
    MAT_VIEW ACCESS BY INDEX ROWID     Object owner=CORP     Object name=BI_STORE_INFO     Cost=1     Cardinality=1     Bytes=22
    VIEW     Object owner=DS     cost=11     Cardinality=342     Bytes=1710
    HASH JOIN               Cost=11     Cardinality=342     Bytes=7866
    MAT_VIEW ACCESS FULL     Object owner=CORP     Object name=STORE_CORP     Cost=5     Cardinality=429     Bytes=3003
    NESTED LOOPS               Cost=5     Cardinality=478     Bytes=7648
    MAT_VIEW ACCESS FULL     Object owner=CORP     Object name=STORE_GROUP     Cost=5     Cardinality=478     Bytes=5258
    INDEX UNIQUE SCAN     Object owner=CORP     Object name=STORE_REGIONAL_INFO_PK     Cost=0     Cardinality=1     Bytes=5
    INDEX RANGE SCAN     Object owner=DS     Object name=SOS_PK     Cost=2     Cardinality=1     Bytes=19
    Regards,
    BMP

    First thing that i notice in this query is you are Using Distinct as well as Group by.
    Your group by will always give you distinct results ,then again why do you need the Distinct?
    For example
    WITH t AS
         (SELECT 'clm1' col1, 'contract1' col2,10 value
            FROM DUAL
          UNION ALL
          SELECT 'clm1' , 'contract1' ,10 value
            FROM DUAL
          UNION ALL
          SELECT 'clm1', 'contract2',10
            FROM DUAL
          UNION ALL
          SELECT 'clm2', 'contract1',10
            FROM DUAL
          UNION ALL
          SELECT 'clm3', 'contract1',10
            FROM DUAL
          UNION ALL
          SELECT 'clm4', 'contract2',10
            FROM DUAL)
    SELECT  distinct col1,col2,sum(value) from t
    group by col1,col2Is always same as
    WITH t AS
         (SELECT 'clm1' col1, 'contract1' col2,10 value
            FROM DUAL
          UNION ALL
          SELECT 'clm1' , 'contract1' ,10 value
            FROM DUAL
          UNION ALL
          SELECT 'clm1', 'contract2',10
            FROM DUAL
          UNION ALL
          SELECT 'clm2', 'contract1',10
            FROM DUAL
          UNION ALL
          SELECT 'clm3', 'contract1',10
            FROM DUAL
          UNION ALL
          SELECT 'clm4', 'contract2',10
            FROM DUAL)
    SELECT  col1,col2,sum(value) from t
    group by col1,col2And also
    AND SOL.STATUS_DATE BETWEEN '01-JUN-09' AND '30-JUN-09'It would be best to use a to_date when hard coding your dates.
    Edited by: user5495111 on Aug 6, 2009 1:32 PM

  • How to store data from a complex query and only fresh hourly or daily?

    We have a report which runs quite slow (1-2 minutes) because the query is quite complicate, so we would like to run this query daily only and store in a table so for those procedures that need to use this complex query as a subquery, can just join to this table directly to get results.
    However, I am not sure what kind of object I should use to store data for this complex query. Is data in global temp table only persist within transaction? I need something that can persist the data and be access by procedures.
    Any suggestions are welcome,
    Cheers

    Thank you for your reply. I looked at the materialized view earlier on, but have some difficulties to use it. So I have some questions here:
    1.The complex query is not a sum or aggregate functions, it just need to get data from different tables based on different conditions, in this case is it still appropriate to use meterialized view?
    2.If it is, I created one, but how to use it in my procedure? From the articles I read, it seems I can't just query from this view directly. So do I need to keep the complex query in my procedure and how the procedure will use the meterialized view instead?
    3. I also put the complex query in a normal view, then create a materialized view for this normal view (I expect the data from the complex query will be cache here), then in the procedure I just select * from my_NormalView, but it takes the same time to run even when I set the QUERY_REWRITE_ENABLED to true in the alter session. So I am not sure what else I need to do to make sure the procedure use the materialized view instead of the normal view. Can I query from the Materialized View directly?
    Below in the code I copied from one of the article to create the materialized view based on my normal view:
    CREATE MATERIALIZED VIEW HK3ControlDB.MW_RIRating
    PCTFREE 5 PCTUSED 60
    TABLESPACE "USERS"
    STORAGE (INITIAL 50K NEXT 50K)
    USING INDEX STORAGE (INITIAL 25K NEXT 25K)
    REFRESH START WITH ROUND(SYSDATE + 1) + 11/24
    NEXT NEXT_DAY(TRUNC(SYSDATE), 'MONDAY') + 15/24
    enable query rewrite
    AS SELECT * FROM HK3ControlDB.VW_RIRating;
    Cheers

  • Adhoc Query Requirement with Multiple Data Source

    Hi All,
    I have a Adhoc Query Requirement with Multiple Data Source. Is there any way to achive it. Other than Resultant set and bring into Model.
    Thanks
    SS

    You can compare stuff in the EL, but I don't think this is what you need.
    You can just use Java code in the backing bean class for all the business logic. You can use DAO classes for database access logic. Finally for displaying you can use the JSF tags such as h:outputText.

  • Creating a complex query in CR designer

    I'm running Crystal Reports XI Release 2 on Windows NT. I have a very complex query and cannot figure out how to make it work in CR. Basically, I've got a table A with fields containing reference codes that may or may not be present. I created a SQL query that imbeds select statements in the select fields (the field names between SELECT and FROM). So, it would read something like SELECT field1, field2, (select Code_Name from REF_Table where REF_Table.code=TableA.code and TableA.code is not null) FROM TableA. That works great in SQL Developer.
    In CR, I tried a command field but that produces a cartesian set where I get a line for every record that has the field for each and every record in TableA.  No good. I just want the name for the value in the TableA record translated to the name if it is present.  Is there a way to do this in CR? I used to be able to edit the SQL directly in CR but now it won't let me do that. Anyone know a better way to solve this kind of problem?

    I'm not an Oracle guy so I don't know what you can or can't do in PL SQL.
    I'm surprised that you are getting different results between SQL Developer and the CR Command. CR should pass the query, exactly as it's written back to the server, same as SQL Dev.
    IN T-SQL...If  you want to make sure that the sub-query is returning only 1 row, try placing "TOP 1" behind the SELECT.
    (select top 1 loc.location_name
    from ref_location loc
    where loc.location_num=obd.location_num and odb.location_num is not null)
    I'm thinking that Oracle doesn't have the the TOP N option but it does have a rownum feature. So maybe...
    (SELECT x.location_name
    FROM (
        select loc.location_name
        from ref_location loc
        where loc.location_num=obd.location_num and odb.location_num is not null) x
    WHERE rownum = 1
    ORDER BY rownum)
    This is assuming that Oracle allows you to use ORDER BY in a sub-query. T-SQL only allows it if it's used in conjunction with TOP N...
    Just a thought,
    Jason

  • Complex query crashing database!

    Hi
    Our 10g database runs on Windows 2003 (with 32 GB RAM on server).
    Whenever a user is running a particular complex query, the database just crashes suddenly.
    In fact, it doesn't write anything in alert log file for any problem.
    The user starts the query, it runs for sometime, then suddenly database crashes!
    Only way to work there after is to restart the database.
    Although I asked the user to not to run that query again but it is generated by some application which may generate similar query again!
    So, how I can prevent database from crashing again?
    Will creating a resource profile to allocate finite resource help? Problem is since database crashes so suddenly, I can't find any info from log files!
    Thanx

    The database instance crashes. We have to start the ORACLE.EXE again to up the database.
    Here is last few lines of the alert.log
    Fri Feb 05 11:14:59 2010
    Setting recovery target incarnation to 1
    Fri Feb 05 11:14:59 2010
    Successful mount of redo thread 1, with mount id 1911309359
    Fri Feb 05 11:14:59 2010
    Database mounted in Exclusive Mode
    Completed: alter database mount exclusive
    Fri Feb 05 11:14:59 2010
    alter database open
    Fri Feb 05 11:15:00 2010
    Beginning crash recovery of 1 threads
    parallel recovery started with 7 processes
    Fri Feb 05 11:15:00 2010
    Started redo scan
    Fri Feb 05 11:15:00 2010
    Completed redo scan
    3886 redo blocks read, 276 data blocks need recovery
    Fri Feb 05 11:15:00 2010
    Started redo application at
    Thread 1: logseq 179837, block 3
    Fri Feb 05 11:15:00 2010
    Recovery of Online Redo Log: Thread 1 Group 6 Seq 179837 Reading mem 0
      Mem# 0 errs 0: F:\DB LOG FILES\ORADATA\REDO06.LOG
      Mem# 1 errs 0: F:\DB LOG FILES MULTIPLEXED\ORADATA\REDO06.LOG
    Fri Feb 05 11:15:00 2010
    Completed redo application
    Fri Feb 05 11:15:00 2010
    Completed crash recovery at
    Thread 1: logseq 179837, block 3889, scn 10584777673
    276 data blocks read, 276 data blocks written, 3886 redo blocks read
    Fri Feb 05 11:15:01 2010
    LGWR: STARTING ARCH PROCESSES
    ARC0 started with pid=21, OS id=5752
    Fri Feb 05 11:15:01 2010
    ARC0: Archival started
    ARC1: Archival started
    ARC1 started with pid=22, OS id=4548
    Fri Feb 05 11:15:02 2010
    LGWR: STARTING ARCH PROCESSES COMPLETE
    Thread 1 advanced to log sequence 179838
    Thread 1 opened at log sequence 179838
      Current log# 7 seq# 179838 mem# 0: F:\DB LOG FILES\ORADATA\REDO07.LOG
      Current log# 7 seq# 179838 mem# 1: F:\DB LOG FILES MULTIPLEXED\ORADATA\REDO07.LOG
    Successful open of redo thread 1
    Fri Feb 05 11:15:02 2010
    ARC1: STARTING ARCH PROCESSES
    Fri Feb 05 11:15:02 2010
    ARC0: Becoming the 'no FAL' ARCH
    ARC0: Becoming the 'no SRL' ARCH
    Fri Feb 05 11:15:02 2010
    SMON: enabling cache recovery
    Fri Feb 05 11:15:02 2010
    ARC2: Archival started
    ARC1: STARTING ARCH PROCESSES COMPLETE
    ARC2 started with pid=23, OS id=6120
    Fri Feb 05 11:15:02 2010
    Successfully onlined Undo Tablespace 1.
    Fri Feb 05 11:15:02 2010
    SMON: enabling tx recovery
    Fri Feb 05 11:15:02 2010
    Database Characterset is WE8MSWIN1252
    replication_dependency_tracking turned off (no async multimaster replication found)
    Starting background process QMNC
    QMNC started with pid=25, OS id=5312
    Fri Feb 05 11:15:03 2010
    Completed: alter database open
    Fri Feb 05 11:15:03 2010
    ARC1: Becoming the heartbeat ARCH
    Fri Feb 05 11:16:01 2010
    Shutting down archive processes
    Fri Feb 05 11:16:06 2010
    ARCH shutting down
    ARC2: Archival stopped

  • MVIEW & Complex query.

    Is it impossible at all to create a materialized view using a complex query (i.e. joins + union)?
    Thanks in advance
    Fabio

    Okay, childishness aside, it is possible to create materialized views using joins, unions and sub-queries. However, these sorts of complex materialized views have limited refresh options.
    Cheers, APC

Maybe you are looking for

  • Nokia 5800 alarm bug auto-fix!

    My Nokia 5800 (UK) 0575581 v30.0.011 Had the workdays alarm bug. The alarm would sound 3 minutes late. But after the daylight saving automatic update the bug has disappeared. My Date and time settings: Time zone: Local Time Automatic time update: On

  • Misleading Vertex position info in the info panel

    If anyone is at all interested, the vertex position information provided in the info panel is in a coordinate space relative to the current zoom of the currently active composition viewport, not the coordinate space of the composition. So if your com

  • My serial number for lightroom 6 upgrade will not validate

    I received the message my serial number cannot be validated.  I just downloaded Lightroom 6 upgrade and put in the serial number given to me, but cannot get it to validate?

  • Views for every subtype on object table

    Hi! The environment is (Oracle 10.2.0.3):drop type tp; create or replace type tp as object (   n number ) not final; drop type tp1; create or replace type tp1 under tp (   n1 number ) not final; drop type tp2; create or replace type tp2 under tp (  

  • NoClassDefFoundErrors after Redeployment of an Application

    Hi all, in our current project we encounter the following problem: We deploy our application via the wldeploy ant task and the deployment finishes successfully. But at runtime when an MDB is instantiated by the container we get a NoClassDefFoundError