Is it Possible to join 4 or more tables in a Select Statement?

Hello guys,
Can I do Inner Join 4 or 5 tables in a select statement?

U HAVE  TO SERCH  FOR  KEY FIELD  FOR THAT . MEANS   HOW  TABELS  ARE RELATED EACH OTHE  FOR THIS  U  ALSO USE SQ02
FOR  EXAMPLE
SELECT        bkpf~belnr
                bkpf~gjahr
                bkpf~bukrs
                bkpf~blart
                bkpf~bldat
                bkpf~budat
                bkpf~usnam
                bkpf~tcode
                bkpf~xblnr
                bsik~lifnr
                bsik~bupla
                bsik~secco
          INTO  CORRESPONDING FIELDS OF TABLE itab_pur
          FROM bkpf INNER JOIN bsik
          ON   bkpfbelnr = bsikbelnr
           and  bkpfbukrs = bsikbukrs
           WHERE    bkpf~bukrs  IN co_code
           AND      bkpf~budat  IN pos_dt
           AND      bkpf~tcode  IN t_code
           AND      bsik~secco  IN se_code.
  U CAN  ALSO ADD   MORE TABLE BASED  ON CONDITION

Similar Messages

  • Adding one more table to the select statement joining 4 tables gives dump

    Hi All,
    There is a select statement using which four tables namely VBAK,VBAP,LIPS and LIKPUK(view) are joined(inner join).Here, date and time fields are selected from LIPS and used.
    My requirement is to consider the Date (LIKP - WADAT_IST) instead of LIPS-ERDAT  and time(LIKP-SPE_WAUHR_IST) is to be used instead of LIPS-erzet.
    Neither LIPS nor LIKPUK contains time(SPE_WAUHR_IST) field. And, I cannot remove LIPS table or LIKPUK view as each contains a unique field which is used in the report.
    When I tried to join LIPS in the select query, it is going to dump.
    Can someone suggest a good approach ?
    Thanks,
    Pavan

    Thank you for the detailed explanation of the dump.
    The dump details together with your code lead to the answer: 42.
    Regards,
    Clemens

  • Is is possible to join Invoice Distribution tables to GL or SLA ?

    Hi,
    We want to get the Sub Ledger (AP) Distribution Information and GL Details in one query. Is it possible to join GL/SLA Tables to AP Distribution Tables without using XLA_DISTRIBUTION_LINKS Table?.
    Thanks,
    Sunny

    Hi Vamsi,
    We are trying to populate all these following fields into one staging table.
    AP_INVOICE_DISTRIBUTIONS_ALL.EXEPENDITURE_TYPE
    AP_INVOICES_ALL.INVOICE_NUM
    AP_INVOICE_DISTRIBUTIONS_ALL.PROJECT_ID
    AP_INVOICE_DISTRIBUTIONS_ALL.TASK_ID
    JE_HEADER_ID
    ACCOUNTED_DR
    ACCOUNTED_CR
    GL_SL_LINK_ID
    CODE_COMBINATION_ID.
    Requirement is that SUM(ACCOUNTED_DR) and SUM(ACCOUNTED_CR) in the staging table for any particular JE_HEADER_ID should match with the JE HEADER AMOUNT.
    This is an GL Outbound Interface and we are picking the posted journals for AP Subledger and Sending the Subledger Information along with the GL Information.
    Can you please help me with this?
    THanks,
    Sunny

  • How to join THREE different tables into internal table using one select statement .

    How to join THREE different tables into internal table using one select statement .
    Hi experts,
    I would like to request your guidance in solving the problem of joining the data from three different database tables into one internal table
    Scenario:
    Database tables:
    SPFLI
    SFLIGHT
    SBOOK.
    Table Fields:
    SPFLI - CARRID CONNID COUNTRYFR CITYFRM COUNTRYTO CITYTO
    SFLIGHT - CARRID CONNID FLDATE SEATSMAX SEATSOCC SEATSMAX_C
    SEATSOCC_C SEATSMAX_F SEATSOCC_F
    SBOOK - CARRID CONNID CLASS
    MY INTERNAL TABLE IS IT_XX.
    Your help much appreciated.
    Thanks in advance.
    Pawan.

    Hi Pawan,
    please check below codes. hope it can help you.
    TYPES: BEGIN OF ty_xx,
            carrid     TYPE spfli-carrid   ,
            connid     TYPE spfli-connid   ,
            countryfr  TYPE spfli-countryfr,
            cityfrom   TYPE spfli-cityfrom  ,
            countryto  TYPE spfli-countryto,
            cityto     TYPE spfli-cityto   ,
            fldate     TYPE sflight-fldate ,
            seatsmax   TYPE sflight-seatsmax ,
            seatsocc   TYPE sflight-seatsocc ,
            seatsmax_b TYPE sflight-seatsmax_b,
            seatsocc_b TYPE sflight-seatsocc_b,
            seatsmax_f TYPE sflight-seatsmax_f,
            seatsocc_f TYPE sflight-seatsocc_f,
            class      TYPE sbook-class,
          END OF ty_xx,
          t_xx TYPE STANDARD TABLE OF ty_xx.
    DATA: it_xx TYPE t_xx.
    SELECT spfli~carrid
           spfli~connid
           spfli~countryfr
           spfli~cityfrom
           spfli~countryto
           spfli~cityto
           sflight~fldate
           sflight~seatsmax
           sflight~seatsocc
           sflight~seatsmax_b
           sflight~seatsocc_b
           sflight~seatsmax_f
           sflight~seatsocc_f
           sbook~class
      INTO TABLE it_xx
      FROM spfli INNER JOIN sflight
      ON spfli~carrid = sflight~carrid
      AND spfli~connid = sflight~connid
      INNER JOIN sbook
      ON spfli~carrid = sbook~carrid
      AND spfli~connid = sbook~connid.
    Thanks,
    Yawa

  • Joins And For all Enteries in Select Statement

    Could you please tell me when there is a high amount of data which is being handled in the table, does the use of INNER JOINS and FOR ALL ENTERIES in SELECT Statement decreases the system performance? ?
    Can you also let me know where can i get some tips regarding do's and dont's for ABAP Programming, I want to increase my system performance.
    Currently the programs which are being used are taking a lot of time for execution...
    Its very URGENT!

    Hai Jyotsna
    Go through the following Tips for improving Performence
    For all entries
    The for all entries creates a where clause, where all the entries in the driver table are combined with OR. If the number of entries in the driver table is larger than rsdb/max_blocking_factor, several similar SQL statements are executed to limit the length of the WHERE clause.
    The plus
    Large amount of data
    Mixing processing and reading of data
    Fast internal reprocessing of data
    Fast
    The Minus
    Difficult to program/understand
    Memory could be critical (use FREE or PACKAGE size)
    Some steps that might make FOR ALL ENTRIES more efficient:
    Removing duplicates from the driver table
    Sorting the driver table
    If possible, convert the data in the driver table to ranges so a BETWEEN statement is used instead of and OR statement:
                   FOR ALL ENTRIES IN i_tab
                      WHERE mykey >= i_tab-low and
                 mykey <= i_tab-high.
    Nested selects
    The plus:
    Small amount of data
    Mixing processing and reading of data
    Easy to code - and understand
    The minus:
    Large amount of data
    when mixed processing isn’t needed
    Performance killer no. 1
    Select using JOINS
    The plus
    Very large amount of data
    Similar to Nested selects - when the accesses are planned by the programmer
    In some cases the fastest
    Not so memory critical
    The minus
    Very difficult to program/understand
    Mixing processing and reading of data not possible
    Use the selection criteria
    SELECT * FROM SBOOK.                   
      CHECK: SBOOK-CARRID = 'LH' AND       
                      SBOOK-CONNID = '0400'.        
    ENDSELECT.                             
    SELECT * FROM SBOOK                     
      WHERE CARRID = 'LH' AND               
            CONNID = '0400'.                
    ENDSELECT.                              
    Use the aggregated functions
    C4A = '000'.              
    SELECT * FROM T100        
      WHERE SPRSL = 'D' AND   
            ARBGB = '00'.     
      CHECK: T100-MSGNR > C4A.
      C4A = T100-MSGNR.       
    ENDSELECT.                
    SELECT MAX( MSGNR ) FROM T100 INTO C4A 
    WHERE SPRSL = 'D' AND                
           ARBGB = '00'.                  
    Select with view
    SELECT * FROM DD01L                    
      WHERE DOMNAME LIKE 'CHAR%'           
            AND AS4LOCAL = 'A'.            
      SELECT SINGLE * FROM DD01T           
        WHERE   DOMNAME    = DD01L-DOMNAME 
            AND AS4LOCAL   = 'A'           
            AND AS4VERS    = DD01L-AS4VERS 
            AND DDLANGUAGE = SY-LANGU.     
    ENDSELECT.                             
    SELECT * FROM DD01V                    
    WHERE DOMNAME LIKE 'CHAR%'           
           AND DDLANGUAGE = SY-LANGU.     
    ENDSELECT.                             
    Select with index support
    SELECT * FROM T100            
    WHERE     ARBGB = '00'      
           AND MSGNR = '999'.    
    ENDSELECT.                    
    SELECT * FROM T002.             
      SELECT * FROM T100            
        WHERE     SPRSL = T002-SPRAS
              AND ARBGB = '00'      
              AND MSGNR = '999'.    
      ENDSELECT.                    
    ENDSELECT.                      
    Select … Into table
    REFRESH X006.                 
    SELECT * FROM T006 INTO X006. 
      APPEND X006.                
    ENDSELECT
    SELECT * FROM T006 INTO TABLE X006.
    Select with selection list
    SELECT * FROM DD01L              
      WHERE DOMNAME LIKE 'CHAR%'     
            AND AS4LOCAL = 'A'.      
    ENDSELECT
    SELECT DOMNAME FROM DD01L    
    INTO DD01L-DOMNAME         
    WHERE DOMNAME LIKE 'CHAR%' 
           AND AS4LOCAL = 'A'.  
    ENDSELECT
    Key access to multiple lines
    LOOP AT TAB.          
    CHECK TAB-K = KVAL. 
    ENDLOOP.              
    LOOP AT TAB WHERE K = KVAL.     
    ENDLOOP.                        
    Copying internal tables
    REFRESH TAB_DEST.              
    LOOP AT TAB_SRC INTO TAB_DEST. 
      APPEND TAB_DEST.             
    ENDLOOP.                       
    TAB_DEST[] = TAB_SRC[].
    Modifying a set of lines
    LOOP AT TAB.             
      IF TAB-FLAG IS INITIAL.
        TAB-FLAG = 'X'.      
      ENDIF.                 
      MODIFY TAB.            
    ENDLOOP.                 
    TAB-FLAG = 'X'.                  
    MODIFY TAB TRANSPORTING FLAG     
               WHERE FLAG IS INITIAL.
    Deleting a sequence of lines
    DO 101 TIMES.               
      DELETE TAB_DEST INDEX 450.
    ENDDO.                      
    DELETE TAB_DEST FROM 450 TO 550.
    Linear search vs. binary
    READ TABLE TAB WITH KEY K = 'X'.
    READ TABLE TAB WITH KEY K = 'X' BINARY SEARCH.
    Comparison of internal tables
    DESCRIBE TABLE: TAB1 LINES L1,      
                    TAB2 LINES L2.      
    IF L1 <> L2.                        
      TAB_DIFFERENT = 'X'.              
    ELSE.                               
      TAB_DIFFERENT = SPACE.            
    LOOP
    AT TAB1.                     
        READ TABLE TAB2 INDEX SY-TABIX. 
        IF TAB1 <> TAB2.                
          TAB_DIFFERENT = 'X'. EXIT.    
        ENDIF.                          
      ENDLOOP.                          
    ENDIF.                              
    IF TAB_DIFFERENT = SPACE.           
    ENDIF.                              
    IF TAB1[] = TAB2[].  
    ENDIF.               
    Modify selected components
    LOOP AT TAB.           
    TAB-DATE = SY-DATUM. 
    MODIFY TAB.          
    ENDLOOP.               
    WA-DATE = SY-DATUM.                    
    LOOP AT TAB.                           
    MODIFY TAB FROM WA TRANSPORTING DATE.
    ENDLOOP.                               
    Appending two internal tables
    LOOP AT TAB_SRC.              
      APPEND TAB_SRC TO TAB_DEST. 
    ENDLOOP
    APPEND LINES OF TAB_SRC TO TAB_DEST.
    Deleting a set of lines
    LOOP AT TAB_DEST WHERE K = KVAL. 
      DELETE TAB_DEST.               
    ENDLOOP
    DELETE TAB_DEST WHERE K = KVAL.
    Tools available in SAP to pin-point a performance problem
    ·                The runtime analysis (SE30)
    ·                SQL Trace (ST05)
    ·                Tips and Tricks tool
    ·                The performance database
    Optimizing the load of the database
    Using table buffering
    Using buffered tables improves the performance considerably. Note that in some cases a statement can not be used with a buffered table, so when using these statements the buffer will be bypassed. These statements are:
    Select DISTINCT
    ORDER BY / GROUP BY / HAVING clause
    Any WHERE clause that contains a sub query or IS NULL expression
    JOIN s
    A SELECT... FOR UPDATE
    If you wan t to explicitly bypass the buffer, use the BYPASS BUFFER addition to the SELECT clause.
    Use the ABAP SORT Clause Instead of ORDER BY
    The ORDER BY clause is executed on the database server while the ABAP SORT statement is executed on the application server. The database server will usually be the bottleneck, so sometimes it is better to move the sort from the database server to the application server.
    If you are not sorting by the primary key ( E.g. using the ORDER BY PRIMARY key statement) but are sorting by another key, it could be better to use the ABAP SORT statement to sort the data in an internal table. Note however that for very large result sets it might not be a feasible solution and you would want to let the database server sort it.
    Avoid the SELECT DISTINCT Statement
    As with the ORDER BY clause it could be better to avoid using SELECT DISTINCT, if some of the fields are not part of an index. Instead use ABAP SORT + DELETE ADJACENT DUPLICATES on an internal table, to delete duplicate rows.
    Thanks & regards
    Sreenivasulu P

  • How to use bind variable value for table name in select statement.

    Hi everyone,
    I am having tough time to use value of bind variable for table name in select statement. I tried &p37_table_name. ,
    :p37_table_name or v('p37_table_name) but none worked.
    Following is the sql for interactive report:
    select * from v('p37_table_name') where key_loc = :P37_KEY_LOC and
    to_char(inspection_dte,'mm/dd/yyyy') = :P37_INSP_DT AND :p37_column_name is not null ;
    I am setting value of p37_table_name in previous page which is atm_state_day_insp.
    Following is error msg:
    "Query cannot be parsed, please check the syntax of your query. (ORA-00933: SQL command not properly ended) "
    Any help would be higly appreciated.
    Raj

    Interestingly enough I always had the same impression that you had to use a function to do this but found out from someone else that all you need to do is change the radio button from Use Query-Specific Column Names and Validate Query to Use Generic Column Names (parse query at runtime only). Apex will substitute your bind variable for you at run-time (something you can't normally do in pl/sql without using dynamic sql)

  • Possible to join multiple internal tables ?

    Is it possible to join internal tables like this:
    itab1:
    fields are matnr f1 f2
    itab2:
    fields are matnr f3 f4
    itab3:
    fields are matnr f5 f6
    required final-itab:
    fields are - matnr f1 f2 f3 f4 f5 f6
    (which are joined by matnr)
    Thanks.

    Ok, then we need to take all three ITABs and get all of the MATNRs into another internal table, then loop at this internal table and read the records for ITAB1, ITAB2, and ITAB3.
    data: begin of imatnr occurs 0,
          matnr type mara-matnr,
          end of imatnr.
    loop at itab1.
      imatnr-matnr = itab1-matnr.
      collect imatnr.
    endloop.
    loop at itab2.
      imatnr-matnr = itab2-matnr.
      collect imatnr.
    endloop.
    loop at itab3.
      imatnr-matnr = itab3-matnr.
      collect imatnr.
    endloop.
    Loop at imatnr.
    clear final_itab.
    final_itab-matnr = imatnr-matnr.
    clear itab1.
    read table itab1 with key matnr = imatnr-matnr.
    if sy-subrc = 0.
    final_itab-f1 = itab1-f1.
    final_itab-f2 = itab1-f2.
    endif.
    clear itab2.
    read table itab2 with key matnr = imatnr-matnr.
    if sy-subrc = 0.
    final_itab-f3 = itab2-f3.
    final_itab-f4 = itab2-f4.
    endif.
    clear itab3.
    read table itab3 with key matnr = imatnr-matnr.
    if sy-subrc = 0.
    final_itab-f5 = itab3-f5.
    final_itab-f6 = itab3-f6.
    endif.
    append final_itab.
    endloop.
    REgards,
    Rich Heilman

  • Calling an SP takes over 200% more time over the select statement

    As part of my POC converting a SQL Server application over to SAP HANA, I'm find that CALL is taking over 200% more time than calling the SELECT statement directly. The result is that the application that uses ODBC against HANA with CALL statements is taking much more time than SQL Server. I'm finding this for all stored procedure calls in the application. Here is an example:
    CREATE PROCEDURE dbo.usp_GetOrdersByCustomerID
    (IN C_ID bigint)
    LANGUAGE SQLSCRIPT DEFAULT SCHEMA "DBO" READS SQL DATA
    AS BEGIN
    SELECT  TOP 20
       C_F_NAME,
                C_L_NAME,
                C_EMAIL,
                O_ID,
                O_TOTAL,
                O_DTS,
                O_FM_DTS
    FROM    dbo.Customer JOIN dbo.Orders ON C_ID = O_C_ID
    WHERE   C_ID = :C_ID
        ORDER   BY O_ID DESC;
    END;
    When using the following CALL statement in SAP HANA Studio
    CALL dbo.usp_GetOrdersByCustomerID(3429);
    I get execution times that look like this:
    Statement 'CALL dbo.usp_GetOrdersByCustomerID(3429)'
    successfully executed in 9 ms 663 µs  (server processing time: 8 ms 115 µs)
    Fetched 5 row(s) in 0 ms 69 µs (server processing time: 0 ms 0 µs)
    Statement 'CALL dbo.usp_GetOrdersByCustomerID(3429)'
    successfully executed in 11 ms 851 µs (server processing time: 8 ms 238 µs)
    Fetched 5 row(s) in 0 ms 62 µs (server processing time: 0 ms 0 µs)
    Statement 'CALL dbo.usp_GetOrdersByCustomerID(3429)'
    successfully executed in 8 ms 522 µs  (server processing time: 6 ms 892 µs)
    Fetched 5 row(s) in 0 ms 93 µs (server processing time: 0 ms 0 µs)
    When I execute the select statement with the hard coded parameter value, I get much faster results:
    Statement 'SELECT TOP 20 C_F_NAME, C_L_NAME, C_EMAIL, O_ID, O_TOTAL, O_DTS, O_FM_DTS FROM dbo.Customer JOIN ...'
    successfully executed in 4 ms 430 µs  (server processing time: 2 ms 424 µs)
    Fetched 5 row(s) in 0 ms 73 µs (server processing time: 0 ms 0 µs)
    Statement 'SELECT TOP 20 C_F_NAME, C_L_NAME, C_EMAIL, O_ID, O_TOTAL, O_DTS, O_FM_DTS FROM dbo.Customer JOIN ...'
    successfully executed in 4 ms 105 µs  (server processing time: 2 ms 210 µs)
    Fetched 5 row(s) in 0 ms 69 µs (server processing time: 0 ms 0 µs)
    Statement 'SELECT TOP 20 C_F_NAME, C_L_NAME, C_EMAIL, O_ID, O_TOTAL, O_DTS, O_FM_DTS FROM dbo.Customer JOIN ...'
    successfully executed in 4 ms 694 µs  (server processing time: 2 ms 810 µs)
    Fetched 5 row(s) in 0 ms 60 µs (server processing time: 0 ms 0 µs)
    I have 500,000 rows in the Customers table and 2,500,000 rows in the Orders table. The tables are COLUMN tables.
    Is there an optimization that I'm missing?
    Regards,
    Bill

    Hi Bill,
    Can you please try something:
    tab_cust =
    SELECT
       C_F_NAME,
                C_L_NAME,
                C_EMAIL
    FROM    dbo.Customer
    WHERE   C_ID = :C_ID;
    tab_orders =
    SELECT
                O_ID,
                O_TOTAL,
                O_DTS,
                O_FM_DTS
    FROM    dbo.Orders ON C_ID = O_C_ID
    WHERE   O_C_ID = :C_ID
    SELECT  TOP 20
       C_F_NAME,
                C_L_NAME,
                C_EMAIL,
                O_ID,
                O_TOTAL,
                O_DTS,
                O_FM_DTS
    FROM    :tab_cust JOIN :tab_orders ON C_ID = O_C_ID
        ORDER   BY O_ID DESC;
    END;
    Expected behavior: The data set for each of the tables is filtered out and then joined. Although the filter is expected to be pushed to each of the joined tables even in your case, but this is worth the try.
    Regards,
    Ravi

  • ACCESSING MULTIPLE TABLES THRU ONE SELECT STATEMENTS

    How to access multiple tables through one single select statement and also using where condition in it for multiple fields which are from different tables. please give me any example from any tables ....thanks in advance

    See the below example code :
    REPORT ZMM_COST no standard page heading
                            line-size 255
                            message-id zwave  .
    type-pools
    type-pools : slis.
    Tables
    tables : mara,
             makt,
             mbew,
             konp,
             pgmi,
             marc,
             RMCP3,
             sscrfields,
             mvke.
    Internal Table for MARC and MARA
    data : begin of i_join occurs 0,
           matnr like mara-matnr, " Material #
           meins like mara-meins, " Unit of Measure
           werks like marc-werks, " Plant
           zzdept like marc-zzdept," Department
           end of i_join.
    Internal table for PGMI
    data : begin of i_pgmi occurs 0,
           werks like pgmi-werks, " Plant,
           nrmit like pgmi-nrmit, " Material #
           wemit like pgmi-wemit, " Plant
           end of i_pgmi.
    Internal Table for MBEW
    data i_mbew like mbew occurs 0 with header line.
    Internal Table for Output
    data : begin of i_output occurs 0 ,
           matnr like mara-matnr, " Material #
           maktx like makt-maktx, " Material Desc
           VPRSV like mbew-VPRSV, " Price Control Indicator
           VERPR like mbew-VERPR, " Moving Avg Price
           meins like mara-meins, " Base Unit of Measure
           STPRS like mbew-STPRS, " Standard Price
           LPLPR like mbew-LPLPR, " Current Planned Price
           ZPLPR like mbew-ZPLPR, " Future Planned Price
           VPLPR like mbew-VPLPR, " Previous Planned Price
           kbetr like konp-kbetr, " Sales Price
           KMEIN like konp-KMEIN, " Sales Unit
           margin(5) type p decimals 2,
           vmsta like mvke-vmsta, " Material Status.
           end of i_output.
    Internal Table for A004
    data : i_a004 like a004 occurs 0 with header line.
    Variables
    data : wa_lines type i,
           wa_maktx type makt-maktx,
           v_flag type c.
      ALV Function Module Variables
    DATA: g_repid like sy-repid,
          gs_layout type slis_layout_alv,
          g_exit_caused_by_caller,
          gs_exit_caused_by_user type slis_exit_by_user.
    DATA: gt_fieldcat    type slis_t_fieldcat_alv,
          gs_print       type slis_print_alv,
          gt_events      type slis_t_event,
          gt_list_top_of_page type slis_t_listheader,
          g_status_set   type slis_formname value 'PF_STATUS_SET',
          g_user_command type slis_formname value 'USER_COMMAND',
          g_top_of_page  type slis_formname value 'TOP_OF_PAGE',
          g_top_of_list  type slis_formname value 'TOP_OF_LIST',
          g_end_of_list  type slis_formname value 'END_OF_LIST',
          g_variant LIKE disvariant,
          g_save(1) TYPE c,
          g_tabname_header TYPE slis_tabname,
          g_tabname_item   TYPE slis_tabname,
          g_exit(1) TYPE c,
          gx_variant LIKE disvariant.
    data : gr_layout_bck type slis_layout_alv.
    Selection-screen
    selection-screen : begin of block blk with frame title text-001.
    parameters : p_werks like marc-werks default '1000' obligatory.
    select-options : s_dept for marc-zzdept obligatory,
                     s_matnr for mara-matnr,
                     s_mtart for mara-mtart,
                     s_vprsv for mbew-VPRSV,
                     s_PRGRP for RMCP3-PRGRP MATCHCODE OBJECT MAT2 ,
                     s_vmsta for mvke-vmsta.
    selection-screen: end of block blk.
    *SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE text-003.
    *PARAMETERS: p_vari LIKE disvariant-variant.
    *SELECTION-SCREEN END OF BLOCK b3.
    At slection screen events                                            *
    *-- Process on value request
    *AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_vari.
    PERFORM f4_for_variant.
    Initialization                                                       *
    Initialization.
      g_repid = sy-repid.
    sscrfields-functxt_01 = 'Clear Selection'.
    selection-screen function key 1.
    AT SELECTION-SCREEN.
    case sscrfields-ucomm.
    when 'Clear Selection' or 'FC01'.
    clear: s_matnr,
           p_werks.
    refresh: s_matnr,
             s_dept,
             s_mtart,
             s_vprsv,
             s_PRGRP,
             s_vmsta.
    endcase.
    Start-of-selection.
    start-of-selection.
    Clear the all data.
      perform clear_data.
    Get the data from PGMI Table
      perform get_pgmi.
    Get the data from MARC and MARA Table
      perform get_mara_marc.
    Get the data from MBEW Table
      perform get_mbew.
    Move the data into OUTPUT Table
      perform move_output_internal.
    *end-of-selection.
    end-of-selection.
      if not i_output[] is initial.
    ALV Function Module
        perform print_alv.
      endif.
    *&      Form  get_pgmi
          Select the data from PGMI Table
    FORM get_pgmi.
      clear v_flag.
    If Product group has a value at Selection-screen.
      if not s_prgrp is initial.
        select werks nrmit wemit from pgmi into table i_pgmi
                                 where prgrp in s_prgrp
                                 and   werks = p_werks
                                 and   wemit = p_werks.
        v_flag = 'X'.
      endif.
    ENDFORM.                    " get_pgmi
    *&      Form  get_mara_marc
          Select the data from MARA and MARC
    FORM get_mara_marc.
      if v_flag = 'X'.
        select amatnr ameins bwerks bzzdept into table i_join
               from mara as a inner join marc as b on amatnr = bmatnr
               for all entries in i_pgmi
                                         where a~matnr in s_matnr
                                         and   b~werks = p_werks
                                         and   b~zzdept in s_dept
                                         and   a~mtart in s_mtart
                                         and   a~matnr = i_pgmi-nrmit
                                         and   b~werks = i_pgmi-werks.
      else.
    Get the data from MARA and MARC Table
        select amatnr ameins bwerks bzzdept into table i_join
               from mara as a inner join marc as b on amatnr = bmatnr
                                         where a~matnr in s_matnr
                                         and   b~werks = p_werks
                                         and   b~zzdept in s_dept
                                         and   a~mtart in s_mtart.
      endif.
      clear wa_lines.
      describe  table i_join lines wa_lines.
      if wa_lines is initial.
        message i000(zwave) with 'List contains no data'.
        stop.
      endif.
      sort i_join by matnr werks zzdept.
    ENDFORM.                    " get_mara_marc
    *&      Form  get_mbew
          Select the data from MBEW Table
    FORM get_mbew.
    Get the data from MBEW.
      select * from mbew into table i_mbew
               for all entries in i_join
               where matnr = i_join-matnr.
      clear wa_lines.
      describe  table i_mbew lines wa_lines.
      if wa_lines is initial.
        message i000(zwave) with 'List contains no data'.
        stop.
      endif.
      sort i_mbew by matnr bwkey.
    ENDFORM.                    " get_mbew
    *&      Form  move_output_internal
         Final Results
    FORM move_output_internal.
      loop at i_join.
        clear wa_maktx.
      Compare the data with MVKE Table
        select single vmsta from mvke into mvke-vmsta
                                 where matnr = i_join-matnr
                                 and   vkorg = '0001'
                                 and   vtweg = '01'
                                 and   vmsta in s_vmsta.
        if sy-subrc ne 0.
          continue.
        else.
          i_output-vmsta = mvke-vmsta.
        endif.
        read table i_mbew with key matnr = i_join-matnr
                                   bwkey = i_join-werks
                                   binary search.
        if sy-subrc eq 0.
    Price Control Indicator
          i_output-VPRSV = i_mbew-VPRSV.
    Moving Average Price
          i_output-VERPR = i_mbew-VERPR / i_mbew-peinh.
    Standard Price
          i_output-STPRS = i_mbew-STPRS / i_mbew-peinh.
    Current Planned Price
          i_output-LPLPR = i_mbew-LPLPR / i_mbew-peinh.
    Future Planned Price
          i_output-ZPLPR = i_mbew-ZPLPR / i_mbew-peinh.
    Previous Planned Price
          i_output-VPLPR = i_mbew-VPLPR / i_mbew-peinh.
    Base Unit of Measure - Added by Seshu 01/09/2007
          i_output-meins = i_join-meins.
        else.
          continue.
        endif.
    Get the sales Price.
        perform get_sales_data.
        if i_mbew-VPRSV = 'V'.
    Get the Percentage of Margin
          if i_output-kbetr ne '0.00'.
            i_output-margin = ( ( i_output-kbetr - i_mbew-VERPR )
                               / i_output-kbetr ) * 100 .
          endif.
        else.
    Get the Percentage of Margin
          if i_output-kbetr ne '0.00'.
            i_output-margin = ( ( i_output-kbetr - i_output-stprs )
                               / i_output-kbetr ) * 100 .
          endif.
        endif.
    Get the material Description from MAKT Table
        select single maktx from makt into wa_maktx
                                 where matnr = i_join-matnr
                                 and   spras = 'E'.
        if sy-subrc eq 0.
          i_output-matnr = i_join-matnr.
          i_output-maktx = wa_maktx.
        endif.
        append i_output.
        clear : i_output,
                i_join,
                i_mbew.
      endloop.
    ENDFORM.                    " move_output_internal
    *&      Form  get_sales_data
          Get the Sales Price for each material
    FORM get_sales_data.
    Get the data from A004 table to get KNUMH
    Added new field Sales Unit - Seshu 01/09/2006
      refresh : i_a004.
      clear :   i_a004.
      data : lv_kbetr like konp-kbetr," Condition value
             lv_KPEIN like konp-kpein , "per
             lv_KMEIN like konp-KMEIN. " Sales Unit
      select * from a004 into table i_a004
                              where matnr = i_join-matnr
                              and   vkorg = '0001'
                              and   vtweg = '01'.
      if sy-subrc eq 0.
        sort i_a004 by DATAB descending.
    Get the Latetest Date
        read table i_a004 with key matnr = i_join-matnr
                                   vkorg = '0001'
                                   vtweg = '01'
                                   binary search.
    Get the Sales Value
        select single kbetr KPEIN KMEIN from konp
                 into (lv_kbetr,lv_KPEIN, lv_KMEIN)
                                 where knumh = i_a004-knumh
                                 and   kappl = i_a004-kappl
                                 and   kschl = i_a004-kschl.
        if sy-subrc eq 0.
          i_output-kbetr = lv_kbetr / lv_KPEIN.
          i_output-KMEIN = lv_KMEIN.
        endif.
      endif.
      clear : lv_kbetr,
              lv_kpein,
              lv_KMEIN.
    ENDFORM.                    " get_sales_data
    *&      Form  print_alv
          ALV Function Module
    FORM print_alv.
    Fill the Fiedlcat
      PERFORM fieldcat_init  using gt_fieldcat[].
      gr_layout_bck-edit_mode = 'D'.
      gr_layout_bck-colwidth_optimize = 'X'.
      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
       EXPORTING
       I_INTERFACE_CHECK                 = ' '
       I_BYPASSING_BUFFER                =
       I_BUFFER_ACTIVE                   = ' '
         I_CALLBACK_PROGRAM                = g_repid
       I_CALLBACK_PF_STATUS_SET          = ' '
         I_CALLBACK_USER_COMMAND           = g_user_command
       I_CALLBACK_TOP_OF_PAGE            = ' '
       I_CALLBACK_HTML_TOP_OF_PAGE       = ' '
       I_CALLBACK_HTML_END_OF_LIST       = ' '
       I_STRUCTURE_NAME                  =
       I_BACKGROUND_ID                   = ' '
       I_GRID_TITLE                      =
       I_GRID_SETTINGS                   =
        IS_LAYOUT                         = gr_layout_bck
          IT_FIELDCAT                       = gt_fieldcat[]
       IT_EXCLUDING                      =
       IT_SPECIAL_GROUPS                 =
       IT_SORT                           =
       IT_FILTER                         =
       IS_SEL_HIDE                       =
       I_DEFAULT                         = 'X'
        I_SAVE                            = g_save
        IS_VARIANT                        =
       IT_EVENTS                         =
       IT_EVENT_EXIT                     =
       IS_PRINT                          =
       IS_REPREP_ID                      =
       I_SCREEN_START_COLUMN             = 0
       I_SCREEN_START_LINE               = 0
       I_SCREEN_END_COLUMN               = 0
       I_SCREEN_END_LINE                 = 0
       IT_ALV_GRAPHICS                   =
       IT_ADD_FIELDCAT                   =
       IT_HYPERLINK                      =
       I_HTML_HEIGHT_TOP                 =
       I_HTML_HEIGHT_END                 =
       IT_EXCEPT_QINFO                   =
    IMPORTING
       E_EXIT_CAUSED_BY_CALLER           =
       ES_EXIT_CAUSED_BY_USER            =
        TABLES
          T_OUTTAB                          = i_output
       EXCEPTIONS
         PROGRAM_ERROR                     = 1
         OTHERS                            = 2
      IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.
    ENDFORM.                    " print_alv
    *&      Form  fieldcat_init
          Fieldcat
    FORM fieldcat_init USING  e01_lt_fieldcat type slis_t_fieldcat_alv.
      DATA: LS_FIELDCAT TYPE SLIS_FIELDCAT_ALV.
    Material #
      CLEAR LS_FIELDCAT.
      LS_FIELDCAT-FIELDNAME    = 'MATNR'.
      LS_FIELDCAT-ref_fieldname = 'MATNR'.
      LS_FIELDCAT-ref_tabname = 'MARA'.
      LS_FIELDCAT-TABNAME    = 'I_OUTPUT'.
      ls_fieldcat-seltext_L = 'Material'.
      ls_fieldcat-seltext_M = 'Material'.
      ls_fieldcat-seltext_S = 'Material'.
      APPEND LS_FIELDCAT TO E01_LT_FIELDCAT.
    Material Description
      CLEAR LS_FIELDCAT.
      LS_FIELDCAT-FIELDNAME    = 'MAKTX'.
      LS_FIELDCAT-OUTPUTLEN    = 35.
      LS_FIELDCAT-TABNAME    = 'I_OUTPUT'.
      ls_fieldcat-seltext_L = 'Description'.
      APPEND LS_FIELDCAT TO E01_LT_FIELDCAT.
    Price Indicator
      CLEAR LS_FIELDCAT.
      LS_FIELDCAT-FIELDNAME    = 'VPRSV'.
      LS_FIELDCAT-OUTPUTLEN    = 7.
      LS_FIELDCAT-TABNAME    = 'I_OUTPUT'.
      ls_fieldcat-seltext_L = 'Price Control Indicator'.
      APPEND LS_FIELDCAT TO E01_LT_FIELDCAT.
    Moving Avg Price
      CLEAR LS_FIELDCAT.
      LS_FIELDCAT-FIELDNAME    = 'VERPR'.
      LS_FIELDCAT-OUTPUTLEN    = 11.
      LS_FIELDCAT-TABNAME    = 'I_OUTPUT'.
      ls_fieldcat-seltext_L = 'Moving Avg Price'.
      APPEND LS_FIELDCAT TO E01_LT_FIELDCAT.
    Base Unit of Measure
      CLEAR LS_FIELDCAT.
      LS_FIELDCAT-FIELDNAME    = 'MEINS'.
      LS_FIELDCAT-OUTPUTLEN    = 7.
      LS_FIELDCAT-TABNAME    = 'I_OUTPUT'.
      ls_fieldcat-seltext_L = 'Base Unit'.
      APPEND LS_FIELDCAT TO E01_LT_FIELDCAT.
    Standard Price
      CLEAR LS_FIELDCAT.
      LS_FIELDCAT-FIELDNAME    = 'STPRS'.
      LS_FIELDCAT-OUTPUTLEN    = 11.
      LS_FIELDCAT-TABNAME    = 'I_OUTPUT'.
      ls_fieldcat-seltext_L = 'Standard Price'.
      APPEND LS_FIELDCAT TO E01_LT_FIELDCAT.
    Current Planned Price
      CLEAR LS_FIELDCAT.
      LS_FIELDCAT-FIELDNAME    = 'LPLPR'.
      LS_FIELDCAT-OUTPUTLEN    = 11.
      LS_FIELDCAT-TABNAME    = 'I_OUTPUT'.
      ls_fieldcat-seltext_L = 'Current Planned Price'.
      APPEND LS_FIELDCAT TO E01_LT_FIELDCAT.
    Future Planned Price
      CLEAR LS_FIELDCAT.
      LS_FIELDCAT-FIELDNAME    = 'ZPLPR'.
      LS_FIELDCAT-OUTPUTLEN    = 11.
      LS_FIELDCAT-TABNAME    = 'I_OUTPUT'.
      ls_fieldcat-seltext_L = 'Future Planned Price'.
      APPEND LS_FIELDCAT TO E01_LT_FIELDCAT.
    Previous Planned Price
      CLEAR LS_FIELDCAT.
      LS_FIELDCAT-FIELDNAME    = 'VPLPR'.
      LS_FIELDCAT-OUTPUTLEN    = 11.
      LS_FIELDCAT-TABNAME    = 'I_OUTPUT'.
      ls_fieldcat-seltext_L = 'Previous Planned Price'.
      APPEND LS_FIELDCAT TO E01_LT_FIELDCAT.
    Sales Price
      CLEAR LS_FIELDCAT.
      LS_FIELDCAT-FIELDNAME    = 'KBETR'.
      LS_FIELDCAT-OUTPUTLEN    = 13.
      LS_FIELDCAT-TABNAME    = 'I_OUTPUT'.
      ls_fieldcat-seltext_L = 'Sales Price'.
      APPEND LS_FIELDCAT TO E01_LT_FIELDCAT.
    Sales Unit
      CLEAR LS_FIELDCAT.
      LS_FIELDCAT-FIELDNAME    = 'KMEIN'.
      LS_FIELDCAT-OUTPUTLEN    = 7.
      LS_FIELDCAT-TABNAME    = 'I_OUTPUT'.
      ls_fieldcat-seltext_L = 'Sales Unit'.
      APPEND LS_FIELDCAT TO E01_LT_FIELDCAT.
    % of Gross Margin
      CLEAR LS_FIELDCAT.
      LS_FIELDCAT-FIELDNAME    = 'MARGIN'.
      LS_FIELDCAT-OUTPUTLEN    = 13.
      LS_FIELDCAT-TABNAME    = 'I_OUTPUT'.
      ls_fieldcat-seltext_L = '% of Gross Margin'.
      APPEND LS_FIELDCAT TO E01_LT_FIELDCAT.
    Material Status
      CLEAR LS_FIELDCAT.
      LS_FIELDCAT-FIELDNAME    = 'VMSTA'.
      LS_FIELDCAT-OUTPUTLEN    = 13.
      LS_FIELDCAT-TABNAME    = 'I_OUTPUT'.
      ls_fieldcat-seltext_L = 'Material Status'.
      APPEND LS_FIELDCAT TO E01_LT_FIELDCAT.
    ENDFORM.                    " fieldcat_init
    **&      Form  f4_for_variant
          text
    *FORM f4_for_variant.
    CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
            EXPORTING
                 is_variant          = g_variant
                 i_save              = g_save
                 i_tabname_header    = g_tabname_header
                 i_tabname_item      = g_tabname_item
              it_default_fieldcat =
            IMPORTING
                 e_exit              = g_exit
                 es_variant          = gx_variant
            EXCEPTIONS
                 not_found = 2.
    IF sy-subrc = 2.
       MESSAGE ID sy-msgid TYPE 'S'      NUMBER sy-msgno
               WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ELSE.
       IF g_exit = space.
         p_vari = gx_variant-variant.
       ENDIF.
    ENDIF.
    *ENDFORM.                    " f4_for_variant
    *&      Form  clear_data
          Clear the Internal table
    FORM clear_data.
      clear : i_output,
              i_join,
              i_mbew,
              i_a004,
              i_pgmi.
      refresh :  i_output,
                 i_join,
                 i_mbew,
                 i_a004,
                 i_pgmi.
    ENDFORM.                    " clear_data
          FORM USER_COMMAND                                             *
    FORM user_command USING r_ucomm LIKE sy-ucomm
                rs_selfield TYPE slis_selfield.                 "#EC CALLED
      CASE R_UCOMM.
        WHEN '&IC1'.
          read table i_output index rs_selfield-tabindex.
          SET PARAMETER ID 'MAT' FIELD i_output-matnr.
          SET PARAMETER ID 'WRK' FIELD p_werks.
          if not i_output-matnr is initial.
            call transaction 'MD04' and skip first screen.
          endif.
      ENDCASE.
    ENDFORM.
    Reward Points if it is helpful
    Thanks
    Seshu

  • How user variable table names in select statement

    Dear all,
    I have three table gp1,gp2,g3. i want user variable table in sql query
    for example at oracle forms have a list table showing table names gp1,gp2,gp3
    at form i want user this query
    select gpno from :table where gpno=120;
    how i can specify table name Dynamicly in select query
    Thanks

    Forms_DDL is a one-way street: You can only pass DDL commands TO the database; you cannot get data back using Forms_DDL.
    Exec_SQL is the Forms package that enables dynamic sql within a form. But to retrieve data, you have to make a Exec_SQL call for every column in every row. So it is not a good thing to use, either.
    The ref cursor method should work. You could also retrieve the data into a record group using populate_group_with_query -- it also enables dynamic data retrieval.
    But if you already know you have three distinct tables and you know their names, I would keep it simple and just write three sql select statements.

  • How can I select columns from a table EMP, using Select statement?.

    Hi Friends,
    How can I select columns from a table EMP?.
    I want to select columns of EMP table, using select statement.
    Please reply me urgently.
    Shahzad

    Something like this:
    scott@DBA> select empno,ename,job from emp;
         EMPNO ENAME      JOB
          7369 SMITH      CLERK
          7499 ALLEN      SALESMAN
          7521 WARD       SALESMAN
          7566 JONES      MANAGER
          7654 MARTIN     SALESMAN
          7698 BLAKE      MANAGER
          7782 CLARK      MANAGER
          7788 SCOTT      ANALYST
          7839 KING       PRESIDENT
          7844 TURNER     SALESMAN
          7876 ADAMS      CLERK
          7900 JAMES      CLERK
          7902 FORD       ANALYST
          7934 MILLER     CLERK
    14 rows selected.Check the documentation:
    http://download-east.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_10002.htm#sthref9697
    Message was edited by:
    Delfino Nunez

  • Dynamically assigning table name in select statement

    how can i assign the table name dynamically in Select statement?
    i tried following code
    create or replace procedure proc1
    as
    x varchar2(100);
    y varchar2(10);
    begin
    x='UNIT_MASTER';
    execute immediate 'select unit_code into y from x where
    rownum=1';
    dbms_output.put_line(y);
    end;
    the procedure is created but when i execute the procedure the
    error is shown in the execute immediate statement

    Do the following :
    Create or replace procedure pro1 as
    x varchar2(100);
    y varchar2(10);
    begin
    x := 'UNIT_MASTER';
    EXECUTE IMMEDIATE 'select unit_code from '||x||' where rownum
    = 1' INTO y;
    dbms_output.put_line(y);

  • How to insert variable for table name in Select statement ?

    I am creating a stored procedure which will take two table names as IN parameters. Within the procedures I would like to use the parameters in the following manner;
         SELECT count(*)
         INTO v_target_cnt
         FROM TargetTable;
    TargetTable is one of the parameters passed in. When I do this however it does not recognize the parameter. I have tried assigning the parameter to a local variable and using the variable, with not luck.
    Any help....thanks

    Null,
    What you are describing is called a LEXICAL parameter, which is allowed (preceded by an ampersand) in sql but not in pl/sql because it would not be possible to compile it. That is why you need to use Andrew's suggestion to make the sql dynamic. In older versions you would need to use DBMS_SQL which is horrible and now thankfully redundant.

  • Question on Updating the rows of a table using a SELECT Statement

    Hi,
    I am trying to set all of the R_IDs in one table to the ID from another table using a join.
    Here is the SQL I came up with. I don't this is correct though.
    UPDATE TABLEA A
    SET R_ID=(Select Id from TABLEB B
    WHERE A.DEE=B.DEE AND
    B.RNUM=1);
    Does this make sense?

    You can try the join view.
    UPDATE ( SELECT table_a.id   AS a_id,
                    table_b.id   AS b_id,
                    table_a.col1 AS a_col1,
                    table_b.col1 AS b_col1,
                    table_a.col2 AS a_col2,
                    table_b.col2 AS b_col2,
                    table_a.col3 AS a_col3,
                    table_b.col3 AS b_col3
               FROM table_a,
                    table_b
              WHERE table_a.id = table_b.id)
       SET a_col1 = b_col1,
           a_col2 = b_col2,
           a_col3 = b_col3;
    However it may result in
    ORA-01779: cannot modify a column which maps to a non key-preserved tableThis is because the key-preserving property of a table does not depend on the actual data in the table. It is, rather, a property of its schema. For example, if in table_b there was at most one record for each id value, then table_a.id would be unique in the result of a join of table_a and table_b, but table_a would still not be a key-preserved table. By adding the unique/primary key on the id column of table_b we can assure that if table_b.id were part of the result set of the join view then it would be unique. This makes table_a key preserved.
    Thus, in order to update a join view we must assure that the columns involved in the join view from the source table are unique. We do this by creating a unique or primary key on those columns.
    However, if you do not mind taking responsibility for making sure that there is one-to-one cardinality between the source and destination rows, then you might try the correlated subquery
    UPDATE table_a
       SET (col1, col2, col3 ) =
              ( SELECT col1, col2, col3
                  FROM table_b
                 WHERE table_b.id = table_a.id )
           WHERE EXISTS
               ( SELECT col1, col2, col3
                   FROM table_b
                   WHERE table_b.id = table_a.id )

  • How to compare two fields from the same table in the select statement

    Hi, friends
    I try to compare tow fields from the same table, but no result,
    For example, this
    data: cptotchek tyep i.
    select count(*) into cptotchek
    from aufk where erdat = aufk-idat2 .
    The result is  cptotchek = 0, but there are the records in aufk , where,  aufk-erdat = aufk-idat2.
    Please, help me, i don't use the loop statement for optimize my program.
    Regards

    Hi  ,
           it will not return  any value   when you are using   column of same table 
           such as Date Field   , Because  while Using Aggregate Function  it will not check with self column
    .      For that you have to take data in one internal table and then you can work on it  .
         And if you are worried about Performance  it will not affect  , untill you are selecting only required data  .
    you can try this way  .
    data: cptotchek type i.
    types : begin of  w_aufk.
            include structure aufk  .
          types : end of  w_aufk .
    data : it_aufk type standard table of w_aufk with header line  .
    select * into corresponding fields of table it_aufk
    from aufk  .
    loop at it_aufk .
    if it_aufk-erdat  = it_aufk-idat2 .
    write : / it_aufk-erdat , it_aufk-idat2 .
    else .
    delete it_aufk .
    endif  .
    endloop.
    Regards
    Deepak.

Maybe you are looking for

  • OPM Error while opening excel files

    When I open the excel file of my rule, it gives the following error. Oracle Policy Modeling An error occurred while opening the document 'C:\Documents and Settings\HCHATURV\Desktop\Customer Service\OPA\Development\Rules\Raise.xls': Unable to set the

  • Upgrade MacBook Hard Drive

    While it is obvious that I can upgrade a hard drive, I would like to do so without reinstalling software and, as importantly, changing an identifier (such as a serial number) so that my online backup software will not balk when trying to back up. I h

  • How can I reclaim storage from other category on my iPad?

    I have used PhoneClean, deleted my browser cache, deleted and re added my e-mail account, deleted my text messages and still there is 10 GB in the other category.

  • Moved to Yosemite, now I can't print (Brother MFC-9840CDW)

    Hi there, I've just moved to Yosemite (at the request of GoToMeeting) and I'm now unable to print. I have a Brother MFC-9840CDW which my MacBook Pro can no longer find. As part of the move to 10.10.1 the Brother Printer Software appears to have updat

  • I have just bought macbook air, cant make video calls on skype... why??

    i have just bought macbook air, cant make video calls on skype... why??