SELECT TABLE BASED ON CONDITION

hi every one , i need your help in resolving this issue . if you look at the last column service_id in the select the value of the service_id is derived from by the source_system.
each source system can have 1 to multiple service_ids . the below query returns same data set with different service_ids. my question is
for example when source_system is 'COMS' the i have included table ref_coms_circuit to get multiple service ids. so if i have to include another source_system 'ESP' then how will i do that.
WITH t AS
     (SELECT   so.tin, so.o_seq, so.order_type,
               so.customer_req_due_date customer_due_date,
               MAX (soplm1.milestone_date) order_date,
               MAX (soplm2.milestone_date) hold_begin_date,
               MAX (soplm3.milestone_date) hold_end_date
          FROM s_order so,
               s_order_product_leg_milestone soplm,
               s_order_product_leg_milestone soplm1,
               s_order_product_leg_milestone soplm2,
               s_order_product_leg_milestone soplm3
         WHERE                                    -- so.order_status = 'A' AND
               so.contract_id IN ('157798', '157800')
           --  AND soplm.milestone_id = 4350
           AND soplm.source_system_name = 'OPRO'
           AND soplm.o_seq = so.o_seq
           AND soplm.last_modified_date >=
                  TO_DATE ('07/01/2007 00 :00:00', ' MM/DD/YYYY HH24: MI: SS')
           AND soplm.last_modified_date < SYSDATE
           AND soplm.tin = 'OPRO.670148'
           AND soplm1.tin(+) = so.tin
           AND soplm1.o_seq(+) = so.o_seq
           AND so.tin = soplm2.tin(+)
           AND so.tin = soplm3.tin(+)
           AND so.o_seq = soplm2.o_seq(+)
           AND so.o_seq = soplm3.o_seq(+)
           AND soplm1.milestone_id(+) = 100
           AND soplm1.source_system_name(+) = 'OPRO'
           AND soplm2.milestone_id(+) = 1650
           AND soplm2.source_system_name(+) = 'NPRO'
           AND soplm3.milestone_id(+) = 1690
           AND soplm3.source_system_name(+) = 'NPRO'
      GROUP BY so.tin, so.o_seq, so.order_type, so.customer_req_due_date)
SELECT DISTINCT soplm4.tin, soplm4.VERSION, soplm4.product_serial_number,
                soplm4.node_id, t.order_type, sopl.product_id,
                rp.product_id_desc product_desc, NULL AS product_catalog_id,
                soplm4.source_system_name, t.order_date, t.customer_due_date,
                NULL AS asrn, NULL AS service_typ_seq, t.hold_begin_date,
                t.hold_end_date,
                DECODE (soplm4.source_system_name,
                        'COMS', 'COMS CIRCUIT ID',
                        'FE', 'FE CIRCUIT ID',
                        'VDDS', 'PVC ID',
                        'ESP', 'ESP Product Billing Key',
                        'OTS', 'OTS SITE ID',
                        'UCLP', 'K - Number',
                        'NCAP', 'NETCAP 800# ',
                        'IASA', 'IASA ANI ',
                        'COMP', 'COMMONPLACE AUTH CODE',
                        soplm4.source_system_name
                       ) neid_type,
                CASE soplm4.source_system_name
                   WHEN 'COMS'
                      THEN rcc.circuit_number
                   WHEN 'VDDS'
                      THEN sopl.pvc_id
                   WHEN 'OTS'
                      THEN sopl.site
                   WHEN 'IASA'
                      THEN sopl.iasa_account_id
                   WHEN 'COMP'
                      THEN sopl.pin
                   WHEN 'UCLP'
                      THEN sopl.billing_identifier
                   WHEN 'NCAP'
                      THEN sopl.toll_free_num
--          WHEN 'ESP' THEN soed.product_billing_key
--             WHEN 'FE' THEN
                ELSE NULL
                END service_id
           FROM t,
                s_order_product sop,
                s_order_product_leg sopl,
                s_order_product_leg_milestone soplm4,
                ref_product rp,
                ref_coms_circuit rcc
          WHERE soplm4.tin = t.tin
            AND soplm4.o_seq = t.o_seq
            AND soplm4.source_system_name IN (SELECT source_system_name
                                                FROM com_calnet_systems)
            AND sop.tin = t.tin
            AND sop.o_seq = t.o_seq
            AND sopl.tin = t.tin
            AND sop.op_seq = soplm4.op_seq
            AND sopl.o_seq = t.o_seq
            AND sopl.opl_seq = soplm4.opl_seq
            AND rp.product_id = sopl.product_id
            AND rcc.coms_service_number = sop.coms_service_number;

Either union all of them before or after the join, i.e.,
Solution 1:
SELECT DISTINCT soplm4.tin, soplm4.VERSION, soplm4.product_serial_number,
           FROM t,
                ref_coms_circuit rcc
          WHERE soplm4.tin = t.tin
            AND rcc.coms_service_number = sop.coms_service_number
union all
SELECT DISTINCT soplm4.tin, soplm4.VERSION, soplm4.product_serial_number,
           FROM t,
                ref_vdds_circuit rvc
          WHERE soplm4.tin = t.tin
            AND rvc.coms_service_number = sop.coms_service_number
union all
SELECT DISTINCT soplm4.tin, soplm4.VERSION, soplm4.product_serial_number,
...Solution 2:
SELECT DISTINCT soplm4.tin, soplm4.VERSION, soplm4.product_serial_number,
           FROM t,
           (select 'COMS' source, circuit_number data, coms_service_number
            -- any column you need in your output
            from ref_coms_circuit
            union all
            select 'VDDS', pvc_id, coms_service_number
            -- any column you need in your output
            from ref_vdds_circuit
            union all...) bigunion
          WHERE soplm4.tin = t.tin
            AND soplm4.source_system_name = bigunion.source
            AND rcc.coms_service_number = sop.coms_service_number;Edited by: thtsang on Oct 20, 2009 10:28 PM
Edited by: thtsang on Oct 20, 2009 10:44 PM

Similar Messages

  • Extracting from table based on conditions from two internal tables

    Hi,
         i to have select few records from  a table based on conditions from two different internal tables. How can I achieve this.?
    ex:
          select objid from HRVPAD25 into table t_pad25
                                                    where PLVAR = 01
                                                                OTYPE = E
                                                                OBJID = itab1-sobid
                                                                sobid = itab2-pernr.
    How can this be written? can i use "for all entries..." addition with 2 tables?

    Hi Maansi_SAP,
    you can use exactly one internal table in the FOR ALL ENTRIES clause. Consider this alternative:
    data:
      itab_sobid_hash like itab1 with unique key sobid,
      ls_pad25  like line of  t_pad25.
    sort itab1.
    delete adjacend duplicates from itab1 comparing sobid.
    itab_sobid_hash = itab1.
    select objid
      into ls_pad25
      from HRVPAD25
      for all entries in itab2
      where PLVAR = '01'
        and OTYPE = E
        and sobid = itab2-pernr..
    read table itab_sobid_hash with table key sobid = ls_pad25-objid.
    check sy-subrc = 0.
    append ls_pad25 to t_pad25.
    endselect.
    You may decide if itab1 or itab2 is better used as hashed table. Make a performance test.
    The critics will tell you that SELECT ... ENDSELECT is not performant. That was very true, back in last milleniums's 90ies
    Regards,
    Clemens

  • How to call or not call a Trigger in same table based on condition?

    Hi
    How to call or not call a Trigger in below situations..
    If a table contains a record of same value i.e,
    [i[u]]ID
    1
    1
    3
    In above ID 1 is repeated for two times.
    In this situations i don't want to call a trigger..
    But, the value ID is for 3, now i want to fire a trigger.
    Based on this i want to delete in another table.
    How can I check it?
    Thanks

    Thanks for ur reply..
    The below is my scnario..
    I am having two table
    employee
    Id empcol
    101 111
    101 222
    102 444
    Department
    id deptcol
    101 457
    101 678
    102 543
    The above is my table structure no one column is PK, so i m not able create FK.
    When I am deleting from employee where id =101 and empcol=111,
    the above record is deleted.
    At present I am using After Update Trigger..
    So trigger is called and delete the id 101 in Department table.
    In my scenario i can't delete a record in Department table
    bcoz i am having id morethan 101 in employee table.
    If employee table contains one ID like 102 the Trigger should works.
    How can I check the condition After delete on employee table it contains morethan same employee id?
    The below is my Trigger..
    CREATE OR REPLACE TRIGGER CALL_TRIGGER
    AFTER DELETE ON Employee
    FOR EACH ROW
    DECLARE
    count_id pls_integer;
    BEGIN
    SELECT COUNT(*) INTO count_id from Employee WHERE ID <>:new.ID;
    IF( count_id >1) THEN
    DELETE FROM Depratment where ID=:old.ID;
    END IF;
    END;
    I am geting an error ORA-04091 table is mutuating, trigger cannot seen it.
    I had tried with package and package body also.. But no luck.
    Thanks

  • Dataset from two set of tables based on condition

    I have two queries that will return same columns from two different set of tables ( column mapping has been taken care of). The return type is out ref cursor. (P_SUPPLY_REORDER )
    Query 1-SO
    select
    so.SMO_NO,
    so.SPLY_ORD_DT,
    so.fk_CUST_ID as CUST_ID,
    so.CUST_PO_NO,
    so.ATTENTION_NAME,
    sum(sol.SPLY_ORD_QTY) as SPLY_ORD_QTY,
    --sum(sol.sply_shp_qty),
    so.ST_NAME,
    so.ADDR_LN_2,
    so.ADDR_LN_3,--sta.SHIP_TO_ADDRESS_LINE_3,
    so.CITY_NAME,
    so.ST_TERR_CD,
    so.ZIP_CD,
    so.SPCL_SHP_INSTR_TXT,
    so.SHP_CNFRM_DT
    ,XCOM_ORDER_NO
    from
    supply_order so,
    supply_order_line sol,
    XCOM_ORDER_HEADER
    where
    so.FK_CUST_ID =in_cust_id
    and so.pc_ord_no = sol.fk_pc_ord_no and
    XCOM_ORDER_HEADER.FK_PC_ORD_NO = so.PC_ORD_NO
    group by so.SMO_NO, so.SPLY_ORD_DT, so.fk_CUST_ID,
    so.CUST_PO_NO, so.ATTENTION_NAME,
    so.ST_NAME, so.ADDR_LN_2, so.ADDR_LN_3, so.CITY_NAME, so.ST_TERR_CD,
    so.ZIP_CD, so.SPCL_SHP_INSTR_TXT, so.SHP_CNFRM_DT, XCOM_ORDER_NO;
    Query-2 Xcom
    select
    null as sMO_NO,
    xso.created_date as SPLY_ORD_DT,
    xso.fk_cust_id as cust_id,
    cust.cust_po_no as cust_PO_NO
    ,(sta.SHIP_TO_ATTN_FIRST_NAME||''||sta.SHIP_TO_ATTN_LAST_NAME) as attention_name,
    xsol.CARTONS_ORDERED as SPLY_ORD_QTY,
    --sum(sol.sply_shp_qty),
    sta.SHIP_TO_ADDRESS_LINE_1 as ST_NAME,
    sta.SHIP_TO_ADDRESS_LINE_2 as ADDR_LN_2,
    --sta.SHIP_TO_ADDRESS_LINE_3,
    NULL as ADDR_LN_3,
    sta.ship_to_city as CITY_NAME,
    sta.SHIP_TO_STATE as ST_TERR_CD,
    sta.SHIP_TO_POSTAL_CODE as ZIP_CD,
    sta.SHIPPING_INSTRUCTIONS as SPCL_SHP_INSTR_TXT,
    null  as SHP_CNFRM_DT,
    xso.XCOM_ORDER_NO as XCOM_ORDER_NO
    from
    XCOM_ORDER_HEADER xso,
    XCOM_ORDER_LINES xsol,
    customer cust,
    ship_to_address sta
    where
    cust.cust_id = xso.fk_cust_id and
    sta.fk_cust_id = xso.fk_cust_id
    and xso.FK_CUST_ID =in_cust_id
    and xso.FK_PC_ORD_NO is null
    and xso.xcom_order_no = xsol.fk_xcom_order_no;Now the requirement is
    One of four conditions are possible for each Supply Reorder Number:
    •     Both table queries return no records
    -     Populate all the P_SUPPLY_REORDER output fields with nulls
    •     SUPPLY_ORDER returns a record, but XCOM_ORDER_HEADER returns no records
    -     Populate output fields with values from the join of SUPPLY_ORDER and SUPPLY_ORDER_LINE.
    •     SUPPLY_ORDER returns no records, but XCOM_ORDER_HEADER returns one record
    -     Populate output fields with values from the join of XCOM_ORDER_HEADER and XCOM_ORDER_LINES.
    •     SUPPLY_ORDER returns a record, and XCOM_ORDER_HEADER returns a record; find out the latest order by comapring max(SPLY_ORD_DT)
    from SUPPLY_ORDER with max(CREATED_DATE) from XCOM_ORDER_HEADER.
    -     If the latest order is in SUPPLY_ORDER, then populate output fields with values from the join of SUPPLY_ORDER and SUPPLY_ORDER_LINE.
    -     If order dates are equal from both join results, then populate output fields with values from the join of SUPPLY_ORDER and SUPPLY_ORDER_LINE.
    -     If the latest order is in XCOM_ORDER_HEADER, then populate output fields with values from the join of XCOM_ORDER_HEADER and XCOM_ORDER_LINES.
    Question is how can we switch over the queries to pull respective dataset based on these conditions ( checking that which table join is going to return a row and then based upon latest order if both tables return a row) and all this logic as part of single SQL statement that is returned as OUT Ref Cursor.
    Your help will be really appreciated. Thanks much in advance.

    It would be easier if you would supply a dataset we can work with. And I assume the queries are called within a other cursor which returns in_cust_id right?
    The best/fasters way would be to say goodbye to nested cursors.
    You need:
    the in_cust_id_query
    extend SUPPLY_ORDER with a new field
    max(CREATED_DATE) over (partiontion by cust_id) max_created_dateextend XCOM_ORDER_HEADER with a new field
    max(SPLY_ORD_DT)over (partiontion by cust_id) max_sply_ord_dateThen you make a 3 level SELECT
    the innerst () join all 3 sources
    the second level names the rule
    the outermost level applies the rule to each field:
    SELECT
    -- case statement to each field:
    CASE rule
    WHEN 1 THEN null
    WHEN 2 THEN s_smo_no
    WHEN 3 .... END  SMO_NO,
    SELECT
    -- check all rules:
    case
    --• Both table queries return no records
    when s_in_cust_id IS NULL and h_in_cust_id IS NULL then 1
    --• SUPPLY_ORDER returns a record, but XCOM_ORDER_HEADER returns no records
    when s_in_cust_id IS NOT NULL and h_in_cust_id IS NULL then 2
    --• SUPPLY_ORDER returns no records, but XCOM_ORDER_HEADER returns one record
    when s_in_cust_id IS NULL and h_in_cust_id IS NOT NULL then 3
    ELSE 4 end rule_id,
    i.*
    (SELECT c.in_cust_id,
                 s.*, (with alias of course eg. s_...)
                h.*, (with alias of course  e.g. h_...)
    from  in_cust_id_query c
      LEFT JOIN SUPPLY_ORDER s
       on (c.in_cust_id = s.in_cust_id)
    LEFT XCOM_ORDER_HEADER h
      on (c.in_cust_id = h.in_cust_id) i;I hope you get it.
    Of course you can do what you probable currently do. Open both cursors one by one and compare the results. But when you have 10000 in_cust_ids you start 20000 queries and you have a lot of code.
    This method I'm showing need these roles coded as well, but you'll have ONE single query and that will be as fast as ORACLE can be. And I believe it's easier to read too. (But not simple!)
    If you need more help, try to supply an example we can work on.
    -- andy

  • Calcullating no. of records in an internal table based on condition

    Hi,
    i have several records in an internal table. i need to calculate the number of records which meets a condition. is there any simple logic to find the records which meet the required criteria apart from looping into the internal table.
    your help would be appreciated.
    Thanks,
    kranthi.

    Hi,
    U can use sy-dbcnt after the select querry.
    DBCNT  Number of elements in edited dataset with DB operations
    WRITE: /12 'Number of selected records:', SY-DBCNT CENTERED.
    REPORT ZZZ_TEST1 .
    Tables: mara.
    Types: begin of ty_mara,
           matnr like mara-matnr,
          end of ty_mara.
    DATA: i_mara TYPE STANDARD TABLE OF ty_mara.
    DATA: v_cnt like sy-dbcnt.
    SELECT-OPTIONS: s_matnr FOR MARA-matnr.
    SELECT matnr from mara into table i_mara.
    if sy-subrc = 0.
    v_cnt = sy-dbcnt.
    WRITE: /12 'Number of selected records:', v_cnt CENTERED.
    endif.
    Hope this helps u.
    Thanks & Regards,
    Judith.

  • Joining Two Tables based on Conditions.

    Hi All,
    i would like to join two tables emp and dept with conditional join like
    for example: select emp.column1...............
    left outer join DEPT ON if Dept.column1='A" then emp.column1=dept.column1
    else emp.column2=dept.column3
    i know that bu using the UNION we can dothis, but i donot want to USE UNION.
    please let me know if any workaround for this.
    Thanks,
    Kalyan

    SQL> select * from etl
      2  /
         EMPNO ENAME      JOB              MGR        SAL       COMM     DEPTNO AAA                     DEPT_NO
          7566 JONES      MANAGER         7839       2975                    20 2                         20
          7654 MARTIN     SALESMAN        7698       1250       1400         30 3                         10
          7698 BLAKE      MANAGER         7839       2850                    30 3                         10
          7782 CLARK      MANAGER         7839       2450                    10 1                         20
          7788 SCOTT      ANALYST         7566       3000                    20 2                         20
          7839 KING       PRESIDENT                  5000                    10 1                         20
          7844 TURNER     SALESMAN        7698       1500                    30 3                         10
          7876 ADAMS      CLERK           7788       1100                    20 2                         20
          7900 JAMES      CLERK           7698        950                    30 3                         10
          7902 FORD       ANALYST         7566       3000                    20 2                         20
          7934 MILLER5    CLERK           7782       1300                    10 1                         20
          7936 MILLER7    CLERK           7782       1300                    10 1                         20
    12 rows selected.
    SQL> select * from dept;
        DEPTNO DNAME          LOC
            10 ACCOUNTING     NEW YORK
            20 RESEARCH       DALLAS
            30 SALES          CHICAGO
            40 OPERATIONS     BOSTON
    SQL> ed
    Wrote file afiedt.buf
      1  select
      2     e.empno,
      3     e.ename,
      4     e.deptno,
      5     aaa,
      6     e.dept_no,
      7     d.deptno,
      8     d.dname
      9  from
    10     etl e ,
    11     dept d
    12  where
    13     (e.aaa =1 and e.deptno = d.deptno) or
    14*    (e.aaa =2 and e.dept_no =d.deptno)
    SQL> /
         EMPNO ENAME          DEPTNO AAA                     DEPT_NO     DEPTNO DNAME
          7566 JONES              20 2                            20         20 RESEARCH
          7788 SCOTT              20 2                            20         20 RESEARCH
          7876 ADAMS              20 2                            20         20 RESEARCH
          7902 FORD               20 2                            20         20 RESEARCH
          7782 CLARK              10 1                            20         10 ACCOUNTING
          7839 KING               10 1                            20         10 ACCOUNTING
          7934 MILLER5            10 1                            20         10 ACCOUNTING
          7936 MILLER7            10 1                            20         10 ACCOUNTING
    8 rows selected.Regards
    Singh

  • Update one table based on condition from another table using date ranges

    Hello!
    I have two tables:
    DateRange (consists of ranges of dates):
    StartDate            FinishDate
            Condition
    2014-01-02
          2014-01-03           true
    2014-01-03     
     2014-01-13          
    false
    2014-01-13      
    2014-01-14           true
    Calendar (consists of three-year dates):
    CalendarDate    IsParental
    2014-01-01
    2014-01-02
    2014-01-03
    2014-01-04
    2014-01-05
    2014-01-06
    2014-01-07
    2014-01-08
    2014-01-09
    2014-01-10
    I want to update table Calendar by setting  IsParental=1
      for those dates that are contained in table DateRange between
    StartDate and FinishDate AND Condition  IS TRUE.
    The query without loop should look similar to this but it works wrong:
    UPDATE
    Calendar
    SET IsParental = 1
     WHERE
    CalendarDate   BETWEEN
    (SELECT
    StartDate 
    FROM  DateRange
    WHERE Calendar.  CalendarDate   = DateRange. StartDate
               AND   
    (SELECT StartDate 
    FROM  DateRange
    WHERE Calendar.  CalendarDate   = DateRange. FinishDate
    AND Condition
     IS TRUE
    Is it possible to do without loop? Thank you for help!
    Anastasia

    Hi
    Please post DDL+DML next time :-)
    -- This is the DDL! create the database structure
    create table DateRange(
    StartDate DATE,
    FinishDate DATE,
    Condition BIT
    GO
    create table Calendar(
    CalendarDate DATE,
    IsParental BIT
    GO
    -- This is the DML (insert some sample data)
    insert DateRange
    values
    ('2014-01-02', '2014-01-03', 1),
    ('2014-01-03', '2014-01-13', 0),
    ('2014-01-13', '2014-01-14', 1)
    GO
    insert Calendar(CalendarDate)
    values
    ('2014-01-01'),
    ('2014-01-02'),
    ('2014-01-03'),
    ('2014-01-04'),
    ('2014-01-05'),
    ('2014-01-06'),
    ('2014-01-07'),
    ('2014-01-08'),
    ('2014-01-09'),
    ('2014-01-10')
    select * from DateRange
    select * from Calendar
    GO
    -- This is the solution
    select CalendarDate
    from Calendar C
    where EXISTS (
    select C.CalendarDate
    FROM DateRange D
    where C.CalendarDate between D.StartDate and D.FinishDate and D.Condition = 1
    UPDATE Calendar
    SET IsParental = 1
    from Calendar C
    where EXISTS (
    select C.CalendarDate
    FROM DateRange D
    where C.CalendarDate between D.StartDate and D.FinishDate and D.Condition = 1
    [Personal Site] [Blog] [Facebook]

  • Inserting millions of records into new table based on condition

    Hi All,
    We have a range partitioned table that contains 950,000,000 records (since from 2004) which is again list sub-partitioned on status. Possible values of stauts are 0,1,2,3 and 4.
    The requirement is to get all the rows with status 1 and date less than 24-Aug 2011. (Oracle 11g R2).
    I trying below code
    CREATE TABLE RECONCILIATION_TAB PARALLEL 3 NOLOGGING  
    AS SELECT /*+ INDEX(CARDS_TAB STATUS_IDX) */ ID,STATUS,DATE_D
    FROM CARDS_TAB
    WHERE DATE_D < TO_DATE('24-AUG-2011','DD-MON-YYYY')
    AND STATUS=1; CARDS_TAB has tow global indexes one on status and another on date_d.
    Above query is running for last 28Hrs! Is this the right approach?
    With Regards,
    Farooq Abdulla

    You said the table was range partitioned but you didn't say by what. I'm guessing the table is range partitioned by DATE_D. Is that a valid assumption?
    You said that the table was subpartitioned by status. If the table is subpartitioned by status, what do you mean that the data is randomly distributed? Surely it's confined to particular subpartitions, right?
    What is the query plan without the hint?
    What is the query plan with the hint?
    Why do you believe that adding the hint will be beneficial?
    Justin

  • Select rows based on condition of same row

    Hello,
    I have the following table structure and rows defind here
    http://sqlfiddle.com/#!4/3f474/3
    I would like to select rows if PRODUCT_NO is null then I need to select rows which are having IS_PAYABLE='Y'. If PRODUCT_NO is not null
    then IS_PAYABLE will be 'N' or IS_PAYABLE will be null.
    E.g.
    For PRODUCT_REG HPO_FABRIC, one PRODUCT_NO null so I need select that row only, not the other two rows.
    I can do
    select * from SUPPLIER_DETAILS where  IS_PAYABLE='Y', but what if there are many records with PRODUCT_NO having null or not null
    How can I do this using sql?

    This simple query!!!
    select *
      from supplier_details
    where (product_no is null
        and is_payable = 'Y')
       or (product_no is not null and is_payable is null);
    PRODUCT_REG                                                                                          PRODUCT_SUPPLIER_CODE PRODUCT_NO START_DATE                END_DATE                  IS_PAYABLE
    HPO_FABRIC                                                                                           JP_008                           01-AUG-01                 31-AUG-01                 Y         
    HPO_FABRIC                                                                                           JP_008                STGA-FABR1 16-AUG-01                 31-AUG-01                            --Edited:- Modified Query and Results for 2nd Requirement
    Edited by: Purvesh K on Sep 17, 2012 4:55 PM
    --Removed NVL
    Edited by: Purvesh K on Sep 17, 2012 5:04 PM

  • Display input field on selection screen based on condition

    Hi,
    I have a report with selection with no of  input fields and a checkbox .I want to hide  few i/p fileds based on checkbox i/p.
    If the checkbox = 'X',then only those fields should apper on screen for input.
    how do we get this on sel screen.
    thanks in advance.

    Hi,
    you can use this code as reference.
    Here, depens on check box, in the next screen resepective select options will be displayed.
    You can use this logic for your requirement.
    REPORT Z50871_SELECTOPS_DYNAMIC.
    PARAMETERS : CH_EBELN AS CHECKBOX,
    CH_VBELN AS CHECKBOX.
    DATA: V_EBELN TYPE EKKO-EBELN,
    V_VBELN TYPE VBAK-VBELN.
    SELECTION-SCREEN BEGIN OF SCREEN 100.
    SELECT-OPTIONS : EBELN FOR V_EBELN MODIF ID G1,
    VBELN FOR V_VBELN MODIF ID G2.
    SELECTION-SCREEN END OF SCREEN 100 .
    AT SELECTION-SCREEN OUTPUT.
    IF SY-DYNNR = 100.
    IF CH_EBELN = 'X' AND
    CH_VBELN = ''.
    LOOP AT SCREEN.
    IF SCREEN-GROUP1 EQ 'G1'.
    SCREEN-ACTIVE = '1'.
    ELSE.
    SCREEN-ACTIVE = '0'.
    ENDIF.
    MODIFY SCREEN.
    ENDLOOP.
    ELSEIF CH_VBELN = 'X' AND
    CH_EBELN = '' .
    LOOP AT SCREEN.
    IF SCREEN-GROUP1 EQ 'G2'.
    SCREEN-ACTIVE = '1'.
    ELSE.
    SCREEN-ACTIVE = '0'.
    ENDIF.
    MODIFY SCREEN.
    ENDLOOP.
    ELSEIF CH_EBELN = 'X' AND CH_VBELN = 'X'.
    LOOP AT SCREEN.
    IF SCREEN-GROUP1 EQ 'G1'
    OR SCREEN-GROUP1 EQ 'G2' .
    SCREEN-ACTIVE = '1'.
    ENDIF.
    MODIFY SCREEN.
    ENDLOOP.
    ENDIF.
    ENDIF.
    AT SELECTION-SCREEN.
    IF SY-DYNNR = 1000.
    IF CH_EBELN = 'X' OR CH_VBELN = 'X'.
    CALL SELECTION-SCREEN 100.
    ELSE.
    MESSAGE I000(Z50871MSG) WITH 'Please select atleast one checkbox'.
    ENDIF.
    ENDIF.
    Regards
    Sandeep Reddy

  • How to disable a field in selection screen based on condition.

    Hi,
    I have 2 radio buttons- p_normd, p_recov  and 2 other controls - like text boxes, say tb1 and tb2. and some mandatory fields below.
    If i choose p_normd, i want one control(tb2) to be disabled and if i choose p_recov, i want the other control(tb1) to be disabled(tb2 should be enabled then.)
    Currently i am using the following code. The 1'st radiobutton is intially checked. But the problem is when i click on the 2'nd radio button, the other control(tb1) is not getting disabled. When i double click, i get an error telling mandatory field to be filled. Only after the other mandatory fields below are filled, and after i double click on the unchecked radiobutton, the other control gets disabled.
    Please suggest what to do..
    The current code below:
      AT SELECTION-SCREEN OUTPUT. "ON RADIOBUTTON GROUP rg01.
      LOOP AT SCREEN.
      IF  p_normd EQ c_x  AND screen-group1 = 'SC2'.
            MOVE 0 TO screen-input.
          MODIFY SCREEN.
      ENDIF.
      IF p_recov EQ c_x AND screen-group1 = 'SC1'. "IF screen-name = 'ERDAT-LOW' OR screen-name = 'ERDAT-HIGH'.
            MOVE 0 TO screen-input.
            MODIFY SCREEN.
      ENDIF.
      ENDLOOP.
    Thanks,
    Ammu

    Hi
    declare your parameter as below:
    parameters: p_x type c radio button group g1 user-command r.
    in at selection screen output event .
    check for the radio button.
    loop at screen.
    if screen group is <desired value>
    then screen-active = 0 or 1. <do whatever you want to do.>
    modify screen.
    endloop.
    see below the sample code.
    <<<<<AT SELECTION SCREEN EVENT>>>>>
    AT SELECTION-SCREEN ON BLOCK B1.
      IF P_LCOST = C_X.
        PERFORM CLEAR_FIELDS.    " Clearing fields before loading the screen
        CALL SELECTION-SCREEN 100 STARTING AT 20 5.
      ELSEIF  P_MCOST = C_X.
        PERFORM CLEAR_FIELDS1.          " Clearing fields before loading the screen
        CALL SELECTION-SCREEN 101 STARTING AT 20 5.
      ENDIF.
      IF SY-SUBRC = 0.
        PERFORM VALIDATION.             " Validating selection screen input
      ELSE.
        LEAVE TO TRANSACTION C_TRAN.
      ENDIF.
    <<<<<<DECLARATION PART>>>>>>
    SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
    PARAMETERS: P_LCOST RADIOBUTTON GROUP GI DEFAULT 'X',
                P_MCOST RADIOBUTTON GROUP GI.
    SELECTION-SCREEN END OF BLOCK B1.
    SELECTION-SCREEN BEGIN OF SCREEN 100 AS WINDOW TITLE TEXT-002.
    SELECTION-SCREEN BEGIN OF BLOCK B2.
    PARAMETERS: P_COAREA TYPE CSKS-KOKRS OBLIGATORY,         " controlling area
                P_FYR    TYPE COEP-GJAHR OBLIGATORY,         " fiscal year
                P_PERIOD TYPE COEP-PERIO OBLIGATORY.         " fiscal period
    SELECT-OPTIONS: S_CCNTR FOR V_KOSTL OBLIGATORY,       " Cost Center
                    S_COELM FOR V_KSTAR MODIF ID M1,       " Cost element
                    S_PDATE FOR V_BUDAT OBLIGATORY.       " posting date.
    SELECTION-SCREEN END OF BLOCK B2.
    SELECTION-SCREEN END OF SCREEN 100.
    SELECTION-SCREEN BEGIN OF SCREEN 101 AS WINDOW TITLE TEXT-003.
    SELECTION-SCREEN BEGIN OF BLOCK B3.
    PARAMETERS:     P_CCODE  TYPE T001-BUKRS OBLIGATORY,         " Company Code
                    P_FYEAR  TYPE COEP-GJAHR OBLIGATORY.         " fiscal year
    SELECT-OPTIONS:   S_GLACC FOR V_HKONT OBLIGATORY,       " G/L Account
                      S_PCNTR FOR V_PRCTR MODIF ID M2,      " Profit Center
                      S_PODATE FOR V_BUDAT OBLIGATORY.      " posting date.
    SELECTION-SCREEN END OF BLOCK B3.
    SELECTION-SCREEN END OF SCREEN 101.
    thanks
    LG
    Edited by: LalitG on Apr 13, 2011 1:38 PM

  • Filtering table entries based on conditions

    Hi there,
    I would like to filter out some of the entries of the tables based on condition, how can I do that? I"m currently working on ICWC.
    Thanks,
    Jared

    HI Jared81,
    Use <b>SELECT</b> Statement..
       SELECT SINGLE zzemp_type
       FROM pa9000
       INTO l_employee_type
       WHERE pernr = l_pernr
         AND begda LE sy-datum
         AND endda GE sy-datum.
      IF sy-subrc = 0 .
      endif.
    or use
    <b>READ</b> table statement
    READ TABLE i_ltype INTO w_ltype WITH KEY leave_code =   g_leavetype_selected.
       IF sy-subrc = 0.
         g_leave_cat  = w_ltype-leave_cat.
         g_leave_type = w_ltype-leave_code.
      Append w_ltype to i_ltype.
       ENDIF.
    Rgds,
    Jothi.
    *<u>reward all helpful answers.</u>

  • Show or Hide empty table based on If condition

    I want to show or hide empty table based on condition. The table will be empty with 5 rows,2 cols and should display if <?Rout_Information1_id1?> is blank or null or when XML field is not present. Actually the JDEdwards report will generate XML file. In the XML file if <?Rout_Information1_id1?> is present it will have definitely value like 'PULL' or 'Cut' otherwise sometimes XML field itself will not be present. Need to display the empty table when the <?Rout_Information1_id1?> is not present. I am trying to do as below but the table is not displayed. Can someone tell me how to resolve this.
    <?if:Rout_Information1_id1=' '?>
    5 rows,2 cols table
    <?end if?>
    Thanks,
    Vijay Vattiprolu

    Ok. I used the below syntax from other post and it resolved displaying empty table issue.
    <?if:not(XML_TAG_NAME)?>
    <?end if?>
    Thanks,
    Vijay

  • Database table for Pricing Condition

    Hi,
    Can some one pls help me in finding the database table where I can fetch all the Access Sequences ('A' tables) associated for a particular Pricing Condition.
    Regards,
    Pankaj.

    Hi,
    Goto T685 and fetch KOZGF for your condition type(KSCHL) and KVEWE = 'A'.
    Goto T682I and fetch KOTABNR vaues for all entries in above selected table based on KVEWE = 'A', KAPPL and KOZGF.
    Prefix 'A' to above selected KOTABNR values to get the 'A' tables.
    Hope this helps you!!!
    Regards,
    Ganga

  • How can i update rows  in a table based on a match from a select query

    Hello
    How can i update rows in a table based on a match from a select query fron two other tables with a update using sqlplus ?
    Thanks Glenn
    table1
    attribute1 varchar2 (10)
    attribute2 varchar2 (10)
    processed varchar2 (10)
    table2
    attribute1 varchar2 (10)
    table3
    attribute2 varchar2 (10)
    An example:
    set table1.processed = "Y"
    where (table1.attribute1 = table2.attribute1)
    and (table1.attribute2 = table3.attribute2)

    Hi,
    Etbin wrote:
    Hi, Frank
    taking nulls into account, what if some attributes are null ;) then the query should look like
    NOT TESTED !
    update table1 t1
    set processed = 'Y'
    where exists(select null
    from table2
    where lnnvl(attribute1 != t1.attribute1)
    and exists(select null
    from table3
    where lnnvl(attribute2 != t1.attribute2)
    and processed != 'Y'Regards
    EtbinYes, you could do that. OP specifically requested something else:
    wgdoig wrote:
    set table1.processed = "Y"
    where (table1.attribute1 = table2.attribute1)
    and (table1.attribute2 = table3.attribute2)This WHERE clause won't be TRUE if any of the 4 attribute columns are NULL. It's debatable about what should be done when those columns are NULL.
    But there is no argument about what needs to be done when processed is NULL.
    OP didn't specifically say that the UPDATEshould or shouldn't be done on rows where processed was already 'Y'. You (quite rightly) introduced a condition that would prevent redo from being generated and triggers from firing unnecessarily; I'm just saying that we have to be careful that the same condition doesn't keep the row from being UPDATEd when it is necessary.

Maybe you are looking for

  • Skydrive.exe crashes on Windows 8.1 Pro RTM

    I'm trying to get Skydrive working on a fresh install of Windows 8.1 Pro RTM.  When I go to Skydrive (show my files in skydrive) via the "metro" app, the view is empty.  When I look at the skydrive folder in explorer.exe, it's also empty.  I went to

  • Calling one Web-Dynpro program into Another

    Hi All, I'm currently working on a Web-Dynpro program in which I am display 3 tabs(Using TabStrip) and in each tab I have a ViewContainer.   I want to be able to execute other Web-Dynpro programs within the Viewcontainers of the Tabs.  If the End-Use

  • Oracle 8i Pl/sql Slides

    Hi all, Can anyone tell me the link of book published by Oracle i.e. Oracle 8i slides. I have copied that slides from net sometimes ago but i forget the link now. plz help me in this regard.or if someone has good link of pl/sql , plz do tell me . i w

  • Use destination table values in source to get data

    I have a requirement to get data from source table to destination table. Source is oracle say tablename - 'orasource' fielnames=empid, empname and destination table name is 'sqldest' and field name are empid, empname. My requirement - I want to fetch

  • Apache serving bin files instead of default index

    I was trying to set up Postfix and Mailman today, and I seem to have broken Apache in the process. I installed Postfix and Mailman as in the wiki, but after configuration of Mailman I tried accessing the web server, and the server gave me a bin file