HELP - Nested Case Question (Multiple Rows)

OK, Now that the syntax has been corrected with the help of "Chanchal Wankhade" (Thank you very much!), I have an entirely new issue. I am sure this issue has to do with my case statement logic. I am getting multiple rows, when I am only looking for one. Here is my code:
SELECT
  CASE
    WHEN EP.PHYSICAL_DATE IS NULL
    THEN
      CASE
        WHEN EC.ORIGINAL_CONTRACT_START < ((SYSDATE) - 365)
        THEN 'NEEDS PHYSICAL'
        WHEN EC.ORIGINAL_CONTRACT_START < ((SYSDATE) - 330)
        THEN 'COMING UP'
        ELSE 'No'
        END
    WHEN EP.PHYSICAL_DATE IS NOT NULL
    THEN
      CASE
        WHEN MAX(EP.PHYSICAL_DATE) KEEP (DENSE_RANK LAST ORDER BY EP.PHYSICAL_DATE) < ((SYSDATE) - 365)
        THEN 'NEEDS PHYSICAL'
        WHEN MAX(EP.PHYSICAL_DATE) KEEP (DENSE_RANK LAST ORDER BY EP.PHYSICAL_DATE) < ((SYSDATE) - 330)
        THEN 'COMING UP'
        ELSE 'No'
        END
  END "Needs Physical?"
FROM AP AE
LEFT JOIN EMP_PHYSICAL EP
ON AE.EMP_ID = EP.EMP_ID
LEFT JOIN POSITION_OFFERED PO
ON AE.EMP_ID = PO.EMP_ID
LEFT JOIN EMP_CONTRACT EC
ON AE.EMP_ID         = EC.EMP_ID
WHERE PO.ACTUAL_END IS NULL
AND (EP.PHYSICAL     = 1
OR EP.PHYSICAL      IS NULL)
AND :P71_EMP_ID = AE.EMP_ID
GROUP BY EP.PHYSICAL_DATE, EC.ORIGINAL_CONTRACT_START;The OUTPUT is:
Needs Physical?
Row 1 NEEDS PHYSICAL
Row 2 No
However, only one of these rows should be the output, which is "No". How do you get a nested case statement to evaluate to one result, instead of multiple? I'm quite sure it is in the logic. To spell it out, this is what I am trying to accomplish with the above code:
If the "EP.PHYSICAL_DATE" is null, then use these sets of formula's to evalute the output, BUT if the "EP.PHYSICAL_DATE" is not null, then use these set's of formula's to evaluate the output.
As it stands now, it appears as if my nested case statement is doing exactly what I told it to do, which is to evaluate both conditions, and output both.
Any help would be appreciated. Thanks.
Aqua
Edited by: AquaNX4 on Mar 26, 2013 6:30 AM

If you define your service_level as a table then it will be much easier.
with service_level
as
select 'ALL' parent_lvl, 'Sergeant' srv_lvl from dual union all
select 'ALL', 'Bonus I' from dual union all
select 'ALL', 'Deputy Bailiff' from dual union all
select 'ALL', 'Deputy Lockup' from dual union all
select 'ALL', 'Deputy Bailiff Security' from dual union all
select 'ALL', 'Custody Assistant' from dual union all
select 'ALL', 'Security Officer' from dual union all
select 'ALL', 'Security Assistant' from dual union all
select 'ALL', 'Security Officer and Security Assistant' from dual union all
select 'ALL', 'Private Security' from dual union all
select 'All Deputies', 'Deputy Bailiff' srv_lvl from dual union all
select 'All Deputies', 'Deputy Bailiff Security' from dual union all
select 'All Deputies', 'Deputy Lockup' from dual union all
select 'All Sworn', 'Sergeant' srv_lvl from dual union all
select 'All Sworn','Bonus I' from dual union all
select 'All Sworn','All Deputies' from dual union all
select 'All Sworn','Deputy Bailiff' from dual union all
select 'All Sworn','Deputy Lockup' from dual union all
select 'All Sworn','Deputy Bailiff Security' from dual
select *
  from in_service
where rank IN (
          select srv_lvl
            from service_level
           where upper(parent_lvl) = upper(:SL)
              or upper(srv_lvl) = upper(:SL)
               )

Similar Messages

  • Help me with returing multiple rows - Query

    I am trying to return multiple rows and i need help with my query.
    and most important of all one of the requirement is the following:
    SERVICE LEVEL has categories Sergeant, Bonus I, All Deputies, Deputy Bailiff, Deputy Lockup, Deputy Bailiff Security, Custody Assistant,
    Security Officer, Security Assistant, Security Officer and Security Assistant, Private Security, ALL, All Sworn)
    Note: Service Level “All Deputies” includes Deputy Bailiff, Deputy Bailiff Security and Deputy Lockup
    *“All Sworn”: includes Sergeant, Bonus I, All Deputies, Deputy Bailiff, Deputy Lockup, Deputy Bailiff Security*
    //this code doesn't work cuz  case- when statement return only one row. but it works for singles such as 'Sergeant'
    select *
    from in_service
    where rank IN (CASE TRIM(UPPER(:SL))
                    WHEN 'ALL DEPUTIES' THEN
                      (SELECT DISTINCT RANK FROM IN_SERVICE
                       WHERE UPPER(RANK) LIKE 'DEPUTY%')
                    WHEN 'ALL SWORN' THEN
                   (SELECT DISTINCT RANK FROM IN_SERVICE
                   WHERE UPPER(RANK) LIKE 'DEPUTY%' OR
                   UPPER(RANK) = 'SERGEANT' OR
                   UPPER(RANK) = 'BONUS 1')
                    WHEN 'ALL' THEN
                   (SELECT DISTINCT RANK FROM IN_SERVICE
                   WHERE UPPER(RANK) LIKE 'DEPUTY%' OR
                   UPPER(RANK) = 'SERGEANT' OR
                    UPPER(RANK) = 'BONUS 1' OR
                   UPPER(RANK) LIKE 'SECURITY%' OR
                   UPPER(RANK) = 'CUSTODY ASSISTANT' OR
                    UPPER(RANK) = 'PRIVATE SECURITY') 
                    end )   I was able to get multiple rows for 'ALL' and specified category like 'Sergeant' or 'Bonus I' from the code below, but NOT for 'All Deputies' for example which includes Deputy Bailiff, Deputy Bailiff Security and Deputy Lockup. I know CASE, WHEN does NOT return multiple rows, but i am having problems writing the query to make it work for all categories as the requirements mentioned above.
    WHERE RANK IN (SELECT RANK FROM (SELECT RANK, 'ALL' ALL_SERVICE
                                            FROM IN_SERVICE
                                            UNION ALL
                                            SELECT RANK, RANK
                                            FROM IN_SERVICE) WHERE ALL_SERVICE = :SL)Please help.
    Thanks in advance

    If you define your service_level as a table then it will be much easier.
    with service_level
    as
    select 'ALL' parent_lvl, 'Sergeant' srv_lvl from dual union all
    select 'ALL', 'Bonus I' from dual union all
    select 'ALL', 'Deputy Bailiff' from dual union all
    select 'ALL', 'Deputy Lockup' from dual union all
    select 'ALL', 'Deputy Bailiff Security' from dual union all
    select 'ALL', 'Custody Assistant' from dual union all
    select 'ALL', 'Security Officer' from dual union all
    select 'ALL', 'Security Assistant' from dual union all
    select 'ALL', 'Security Officer and Security Assistant' from dual union all
    select 'ALL', 'Private Security' from dual union all
    select 'All Deputies', 'Deputy Bailiff' srv_lvl from dual union all
    select 'All Deputies', 'Deputy Bailiff Security' from dual union all
    select 'All Deputies', 'Deputy Lockup' from dual union all
    select 'All Sworn', 'Sergeant' srv_lvl from dual union all
    select 'All Sworn','Bonus I' from dual union all
    select 'All Sworn','All Deputies' from dual union all
    select 'All Sworn','Deputy Bailiff' from dual union all
    select 'All Sworn','Deputy Lockup' from dual union all
    select 'All Sworn','Deputy Bailiff Security' from dual
    select *
      from in_service
    where rank IN (
              select srv_lvl
                from service_level
               where upper(parent_lvl) = upper(:SL)
                  or upper(srv_lvl) = upper(:SL)
                   )

  • Report Template Help - Vertical report with multiple rows on the same line.

    I am tearing my hair out trying to figure a way to do this. I want a vertical report, but with the rows across the page rather than down it.
    e.g.
    ROW1    ROW2    ROW3    ROW4   ROW5
    ROW1    ROW2    ROW3    ROW4   ROW5
    ROW1    ROW2    ROW3    ROW4   ROW5
    ROW1    ROW2    ROW3    ROW4   ROW5
    ROW1    ROW2    ROW3    ROW4   ROW5
    ROW1    ROW2    ROW3    ROW4   ROW5
    ROW1    ROW2    ROW3    ROW4   ROW5
    ROW1    ROW2    ROW3    ROW4   ROW5Has anyone managed to do this?

    Use a custom named column report template. The template could generate either:
    <li> a table with one physical <tt>tr</tt> row, with your "columns" being the logical "rows" of the report rendered as the <tt>td</tt>s within the row
    <li> a list of lists using CSS to render them side-by-side via <tt>float</tt> or <tt>inline-block</tt> (Some examples of similar techniques)

  • MULTIPLE-ROW drag and drop between 2 ALV grids

    Hi,
    Can anybody help me with acheiving MULTIPLE-ROW drag and drop functionality between 2 ALV grids.

    hi Prakash,
    Actually I'm trying to develop multiple drag and drop between 2 ALV's. To understand the events properly, I started working on this sample program where it uses 1 ALV and splits it into 2 and uses single row drag and drop between them. Now I'm making it to work for multiple drag and drop, so that I can use it on my application. This is the code which I'm working on..
    *& Report  Z_ALV_GRID_CONTROLS_DRAG_DROP                               *
    REPORT  z_alv_grid_controls_drag_drop.
    DATA   : i_ztransactions  TYPE TABLE OF ztransactions
                                   WITH HEADER LINE.
    DATA   : i_ztransactions2 TYPE TABLE OF ztransactions
                                   WITH HEADER LINE.
    DATA   : ok_code LIKE sy-ucomm .
    DATA : mcontainer TYPE REF TO cl_gui_custom_container .
    DATA : mcontleft  TYPE REF TO cl_gui_container .
    DATA : mcontright TYPE REF TO cl_gui_container .
    DATA : msplitcont TYPE REF TO
                            cl_gui_easy_splitter_container .
    DATA : malv_left  TYPE REF TO cl_gui_alv_grid .
    DATA : malv_right TYPE REF TO cl_gui_alv_grid .
    DATA : mrow TYPE lvc_s_row .
    DATA : gt_outtab_source TYPE ztransactions.
    DATA : gt_outtab_target TYPE ztransactions.
    DATA : g_repid LIKE sy-repid.
    DATA:   gs_layout TYPE lvc_s_layo ,
            g_behaviour_alv TYPE REF TO cl_dragdrop .
    DATA : mlines TYPE i .
          CLASS lcl_dragdropobj DEFINITION
    This is the Class of Drag Drop Object .
    This Object is used as a temporary storage means
    of the information extracted with drag
    CLASS lcl_dragdropobj DEFINITION.
      PUBLIC SECTION.
        DATA: i_ztransactions  TYPE ztransactions ,
              index TYPE i ,
              original_table(5) TYPE c ,
              proceed_trans(1) TYPE c .
    ENDCLASS.                    "lcl_dragdropobj DEFINITION
    DATA : mdata TYPE REF TO lcl_dragdropobj .
          CLASS DND_TOOLS DEFINITION
    This class contains the methods responding to the
    events ONDRAG , ONDROP , ONDROPCOMPLETE
    of the ALV Grid Controls
    CLASS dnd_tools DEFINITION .
      PUBLIC SECTION .
       METHODS:handle_user_command
                               FOR EVENT user_command OF
                               cl_gui_alv_grid
                               IMPORTING
                               e_ucomm.
        METHODS : handle_drag_from_left
                             FOR EVENT ondrag OF
                              cl_gui_alv_grid
                              IMPORTING
                              e_row
                              e_dragdropobj .
        METHODS : handle_dropcomplete_from_left
                              FOR EVENT ondropcomplete  OF
                              cl_gui_alv_grid
                              IMPORTING
                              e_row
                              e_dragdropobj .
        METHODS : handle_drag_from_right
                              FOR EVENT ondrag OF
                              cl_gui_alv_grid
                              IMPORTING
                              e_row
                              e_dragdropobj .
        METHODS : handle_dropcomplete_from_right
                              FOR EVENT ondropcomplete  OF
                              cl_gui_alv_grid
                              IMPORTING
                              e_row
                              e_dragdropobj .
        METHODS : handle_drop_to_left
                              FOR EVENT ondrop OF
                              cl_gui_alv_grid
                              IMPORTING
                               e_dragdropobj .
        METHODS : handle_drop_to_right
                              FOR EVENT ondrop OF
                              cl_gui_alv_grid
                              IMPORTING
                              e_dragdropobj .
    ENDCLASS .                    "DND_TOOLS DEFINITION
          CLASS DND_TOOLS IMPLEMENTATION
    CLASS dnd_tools IMPLEMENTATION .
      METHOD handle_drag_from_left .
    METHOD handle_user_command.
       DATA: lt_rows TYPE lvc_t_row.
        DATA: lt_rows TYPE lvc_t_roid.
        DATA: lt_row TYPE lvc_s_roid.
        DATA: mdata TYPE REF TO lcl_dragdropobj .
        DATA: dragdropobj TYPE REF TO lcl_dragdropobj .
    get selected row
        CALL METHOD malv_left->get_selected_rows
          IMPORTING
            et_row_no = lt_rows.
        CALL METHOD cl_gui_cfw=>flush.
        IF sy-subrc NE 0.
    add your handling, for example
          CALL FUNCTION 'POPUP_TO_INFORM'
            EXPORTING
              titel = g_repid
              txt2  = sy-subrc
              txt1  = 'Error in Flush'(500).
        ENDIF.
        CREATE OBJECT mdata.
        LOOP AT lt_rows INTO lt_row.
         mrow = lt_row .
          READ TABLE i_ztransactions INDEX lt_row-row_id INTO
                     i_ztransactions.
          MOVE i_ztransactions TO mdata->i_ztransactions .
          MOVE lt_row-row_id TO mdata->index.
          MOVE 'LEFT' TO mdata->original_table .
          e_dragdropobj->object = mdata .
        ENDLOOP.
      ENDMETHOD.                           "handle_user_command
      METHOD handle_dropcomplete_from_left .
      NB : the following data object MDATA is local to
      the method and contains the information from the
      import parameter of the method E_DRAGDROPOBJ
        DATA : mdata TYPE REF TO lcl_dragdropobj .
        DATA: lt_rows TYPE lvc_t_roid.
        DATA: lt_row TYPE lvc_s_roid.
        CALL METHOD malv_left->get_selected_rows
          IMPORTING
            et_row_no = lt_rows.
        CALL METHOD cl_gui_cfw=>flush.
        IF sy-subrc NE 0.
    add your handling, for example
          CALL FUNCTION 'POPUP_TO_INFORM'
            EXPORTING
              titel = g_repid
              txt2  = sy-subrc
              txt1  = 'Error in Flush'(500).
        ENDIF.
        LOOP AT lt_rows INTO lt_row.
          mdata  ?= e_dragdropobj->object .
          CHECK mdata->proceed_trans = 'X' .
          mrow = mdata->index.
          DELETE i_ztransactions INDEX mrow .
          APPEND mdata->i_ztransactions TO i_ztransactions2 .
          SORT i_ztransactions2 BY kunnr belnr .
          DELETE i_ztransactions2 WHERE kunnr IS INITIAL .
          DESCRIBE TABLE i_ztransactions LINES mlines .
          IF mlines EQ 0 .
            CLEAR  i_ztransactions .
            APPEND i_ztransactions TO i_ztransactions .
          ENDIF .
        ENDLOOP.
        CALL METHOD malv_left->refresh_table_display.
        CALL METHOD malv_right->refresh_table_display.
      ENDMETHOD .                    "HANDLE_DROPCOMPLETE_FROM_LEFT
      METHOD handle_drag_from_right.
        mrow = e_row-index .
        READ TABLE i_ztransactions2 INDEX mrow INTO
                   i_ztransactions2 .
        CREATE OBJECT mdata .
        MOVE i_ztransactions2 TO mdata->i_ztransactions .
        MOVE mrow TO mdata->index .
        MOVE 'RIGHT' TO mdata->original_table .
        e_dragdropobj->object = mdata .
      ENDMETHOD .                    "HANDLE_DRAG_FROM_RIGHT
      METHOD handle_dropcomplete_from_right .
        DATA : mdata TYPE REF TO lcl_dragdropobj .
        mdata  ?= e_dragdropobj->object .
        CHECK mdata->proceed_trans = 'X' .
        mrow = mdata->index .
        DELETE i_ztransactions2 INDEX mrow .
        APPEND mdata->i_ztransactions TO i_ztransactions .
        SORT i_ztransactions BY kunnr belnr .
        DELETE i_ztransactions WHERE kunnr IS INITIAL .
        DESCRIBE TABLE i_ztransactions2 LINES mlines .
        IF mlines EQ 0 .
          CLEAR  i_ztransactions2 .
          APPEND i_ztransactions2 TO i_ztransactions2 .
        ENDIF .
        CALL METHOD malv_left->refresh_table_display.
        CALL METHOD malv_right->refresh_table_display.
      ENDMETHOD .                    "HANDLE_DROPCOMPLETE_FROM_RIGHT
      METHOD handle_drop_to_left .
        DATA : mdata TYPE REF TO lcl_dragdropobj .
        mdata  ?= e_dragdropobj->object .
        IF mdata->original_table = 'RIGHT' .
          mdata->proceed_trans = 'X' .
        ELSE .
          mdata->proceed_trans = ' ' .
        ENDIF .
        e_dragdropobj->object = mdata .
      ENDMETHOD .                    "HANDLE_DROP_TO_LEFT
      METHOD handle_drop_to_right .
        DATA : mdata TYPE REF TO lcl_dragdropobj .
        DATA: lt_rows TYPE lvc_t_roid.
        DATA: lt_row TYPE lvc_s_roid.
        CALL METHOD malv_left->get_selected_rows
          IMPORTING
            et_row_no = lt_rows.
        CALL METHOD cl_gui_cfw=>flush.
        IF sy-subrc NE 0.
    add your handling, for example
          CALL FUNCTION 'POPUP_TO_INFORM'
            EXPORTING
              titel = g_repid
              txt2  = sy-subrc
              txt1  = 'Error in Flush'(500).
        ENDIF.
        LOOP AT lt_rows INTO lt_row.
          mdata  ?= e_dragdropobj->object .
          IF mdata->original_table = 'LEFT' .
            mdata->proceed_trans = 'X' .
          ELSE .
            mdata->proceed_trans = ' ' .
          ENDIF .
          e_dragdropobj->object = mdata .
        ENDLOOP.
      ENDMETHOD .                    "HANDLE_DROP_TO_RIGHT
    ENDCLASS .                    "DND_TOOLS IMPLEMENTATION
    DATA : mlistener TYPE REF TO dnd_tools .
    ======================================================
    START OF SELECTION
    ======================================================
    START-OF-SELECTION .
      PERFORM get_data .
      CALL SCREEN 100 .
    The screen 100 has the custom control MCONTAINER and
    on the flow logic has the following modules :
    PROCESS BEFORE OUTPUT.
      MODULE STATUS_0100.
      MODULE PREPARE_SCREEN .
    PROCESS AFTER INPUT.
      MODULE USER_COMMAND_0100.
    (Off course not commented out in the real flow logic)
          FORM GET_DATA                                 *
    FOR THIS EXAMPLE THE DATA SELECTION IS HARD CODED
    FORM get_data .
      CLEAR : i_ztransactions , i_ztransactions[] .
      i_ztransactions-mandt = sy-mandt .
      i_ztransactions-waers = 'EUR  ' .
      i_ztransactions-kunnr = '0000000001' .
      i_ztransactions-belnr = '0000000001' .
      i_ztransactions-bldat = '20030101' .
    i_ztransactions-dmbtr = '1000' .
      APPEND i_ztransactions .
      i_ztransactions-belnr = '0000000002' .
      i_ztransactions-bldat = '20030202' .
    i_ztransactions-dmbtr = '1010' .
      APPEND i_ztransactions .
      i_ztransactions-belnr = '0000000003' .
      i_ztransactions-bldat = '20030323' .
    i_ztransactions-dmbtr = '1020' .
      APPEND i_ztransactions .
      i_ztransactions-belnr = '0000000004' .
      i_ztransactions-bldat = '20030404' .
    i_ztransactions-dmbtr = '1030' .
      APPEND i_ztransactions .
      i_ztransactions-belnr = '0000000005' .
      i_ztransactions-bldat = '20030505' .
    i_ztransactions-dmbtr = '1040' .
      APPEND i_ztransactions .
      i_ztransactions-belnr = '0000000006' .
      i_ztransactions-bldat = '20030606' .
    i_ztransactions-dmbtr = '1050' .
      APPEND i_ztransactions .
      i_ztransactions-belnr = '0000000007' .
      i_ztransactions-bldat = '20030707' .
    i_ztransactions-dmbtr = '1060' .
      APPEND i_ztransactions .
      i_ztransactions-belnr = '0000000008' .
      i_ztransactions-bldat = '20030808' .
    i_ztransactions-dmbtr = '1070' .
      APPEND i_ztransactions .
      i_ztransactions-belnr = '0000000009' .
      i_ztransactions-bldat = '20030909' .
    i_ztransactions-dmbtr = '1080' .
      APPEND i_ztransactions .
      i_ztransactions-belnr = '0000000010' .
      i_ztransactions-bldat = '20031010' .
    i_ztransactions-dmbtr = '1090' .
      APPEND i_ztransactions .
      CLEAR : i_ztransactions2 , i_ztransactions2[] .
      APPEND i_ztransactions2 .
    ENDFORM .                    "GET_DATA
    *&      Module  STATUS_0100  OUTPUT
    The PF STATUS STATUS100 called from the module below,
    has on the Standard toolbar the buttons
    BACK , EXIT and CANCEL .
    These buttons are provided with function code = 'EXIT'
    MODULE status_0100 OUTPUT.
      SET TITLEBAR 'TITLEDRAGDROP' .
      SET PF-STATUS 'STATUS100'.
    ENDMODULE.                 " STATUS_0100  OUTPUT
         Module  USER_COMMAND_0100  INPUT
    The following module checks the User Command and ends
    the program
    MODULE user_command_0100 INPUT.
      IF ok_code = 'EXIT' .
        CLEAR : mcontainer ,
               mcontleft  ,
               mcontright ,
               msplitcont ,
               malv_left  ,
               malv_right .
        LEAVE TO SCREEN 0  .
      ENDIF .
    ENDMODULE.                 " USER_COMMAND_0100  INPUT
    *&      Module  PREPARE_SCREEN  OUTPUT
    MODULE prepare_screen OUTPUT.
      IF mcontainer IS INITIAL .
        CREATE OBJECT mcontainer
                      EXPORTING
                      container_name = 'MCONTAINER' .
        CREATE OBJECT msplitcont
                      EXPORTING
                      parent = mcontainer
                      orientation = 1 .
        mcontleft = msplitcont->top_left_container .
        mcontright = msplitcont->bottom_right_container .
        CREATE OBJECT malv_left
                      EXPORTING i_parent = mcontleft .
        gs_layout-sel_mode = 'D'.
        CREATE OBJECT malv_right
                      EXPORTING i_parent = mcontright .
        gs_layout-sel_mode = 'D'.
        PERFORM set_layout_capable_of_drag_dro
                      USING 'X' 'X' .
        CALL METHOD malv_left->set_table_for_first_display
          EXPORTING
            i_structure_name = 'ZTRANSACTIONS'
            is_layout        = gs_layout
          CHANGING
            it_outtab        = i_ztransactions[].
        CALL METHOD malv_right->set_table_for_first_display
          EXPORTING
            i_structure_name = 'ZTRANSACTIONS'
            is_layout        = gs_layout
          CHANGING
            it_outtab        = i_ztransactions2[].
        CREATE OBJECT mlistener .
        CALL METHOD malv_left->set_toolbar_interactive.
        SET HANDLER mlistener->handle_drag_from_left
                    FOR malv_left .
        SET HANDLER mlistener->handle_dropcomplete_from_left
                    FOR malv_left .
        SET HANDLER mlistener->handle_drag_from_right
                    FOR malv_right.
        SET HANDLER mlistener->handle_dropcomplete_from_right
                      FOR malv_right .
        SET HANDLER mlistener->handle_drop_to_right
                     FOR malv_right .
        SET HANDLER mlistener->handle_drop_to_left
                     FOR malv_left  .
      ENDIF .
    ENDMODULE.                 " PREPARE_SCREEN  OUTPUT
          Form  SET_LAYOUT_CAPABLE_OF_DRAG_DRO
    Definition of a Drag & Drop behaviour for the ALV
    grid
    FORM set_layout_capable_of_drag_dro  USING drag drop.
      DATA : effect TYPE i ,
             handle_alv TYPE i .
      CREATE OBJECT g_behaviour_alv.
      effect = cl_dragdrop=>move + cl_dragdrop=>copy .
      CALL METHOD g_behaviour_alv->add
        EXPORTING
          flavor     = 'Line'
          dragsrc    = drag
          droptarget = drop
          effect     = effect.
      CALL METHOD g_behaviour_alv->get_handle
        IMPORTING
          handle = handle_alv.
      gs_layout-s_dragdrop-row_ddid = handle_alv.
    ENDFORM.              " SET_LAYOUT_CAPABLE_OF_DRAG_DRO

  • Multiple row selection & Send Email Code ? Need littel Help

    Dear All,
    I managed to insert a code which will enable me to select multiple rows (Artikel from the great Yann Duran),
    i also have a code which enables me to send a mail for each selected row (only one row).
    But now since I was able to select more rows, I need to to customize my "Send mail" code to send mail to all selected rows. I guess I will need a loop here but I am not sure.
    My code for multiy row selection :
    private const string _CONTROL = "vw_CustLedgerEntry" // This is my Data Grid;
    private DataGrid _ItemsList = null;
    private int _SelectedRowsCount = 0;
    partial void Part_2_CustomerItemDetail_InitializeDataWorkspace(List<IDataService> saveChangesTo)
    // Write your code here.
    this.FindControl(_CONTROL).ControlAvailable += Orders_ControlAvailable;
    private void Orders_ControlAvailable(object sender, ControlAvailableEventArgs e)
    _ItemsList = e.Control as DataGrid;
    //if the cast failed, just leave, there's nothing more we can do here
    if (_ItemsList == null)
    return;
    //set the property on the grid that allows multiple selection
    _ItemsList.SelectionMode = DataGridSelectionMode.Extended;
    _ItemsList.SelectionChanged += new SelectionChangedEventHandler(_ItemsList_SelectionChanged);
    private void _ItemsList_SelectionChanged(object sender, SelectionChangedEventArgs e)
    switch (_ItemsList == null)
    case true:
    _SelectedRowsCount = 0;
    break;
    case false:
    _SelectedRowsCount = _ItemsList.SelectedItems.Count;
    break;
    This is my code for sending a mail for one selected row:
    partial void EMail_Execute() // EMAIL BUTTON FOR OPEN ENTRIES
    if (vw_CustLedgerEntry.SelectedItem.Report_Type == null)
    // throw new ArgumentNullException();
    this.ShowMessageBox("EMail Can't be sent,PDF generation is not possible for this Entry");
    this.Application.ShowPart_2_CustomerItemDetail(this.vw_CustomerItem.Costomer_No_, this.vw_CustomerItem.Company);
    else// if (vw_CustLedgerEntry.SelectedItem.Send_Mail== true)
    //do
    vw_CustLedgerEntryItem1 entryItem = this.vw_CustLedgerEntry.SelectedItem;
    InvSendbyMailRequestBody reqBody = new InvSendbyMailRequestBody(
    entryItem.Document_No_
    , entryItem.Report_Type
    , "DynNavHRS"
    , this.Application.User.Name.Replace(@"HRS\", "") + "@hrs.com" // HRS001
    , "Document"
    , false
    , false
    , this.vw_CustomerItem.ISO_Code // Change 7.8.2014 Bug in Email body text sprache
    , this.vw_CustomerItem.Salesperson_E_mail // Change 7.8.2014 Bug in Send E-mail
    , entryItem.Customer_No_.ToString()
    , false
    , "XYZ"
    , false);
    InvSendbyMailRequest req = new InvSendbyMailRequest(reqBody);
    HRSReportServiceSoapClient wsHRS = new HRSReportServiceSoapClient();
    // wsHRS.InvSendbyMailCompleted += new EventHandler<InvSendbyMailCompletedEventArgs>(wsHRS_InvGetPDFCompleted);
    wsHRS.InvSendbyMailAsync(req);
    this.ShowMessageBox("Your email was successfully sent");
    // while (vw_CustLedgerEntry.SelectedItem.Send_Mail == true);
    Thaks a lot for your help.
    Zayed

    I tried the following but I donot know if its correct and Iam facing a problem with the "Foreach" function.
    private const string _CONTROL = "vw_CustLedgerEntry" // This is my Data Grid;
    private DataGrid _ItemsList = null;
    private int _SelectedRowsCount = 0;
    partial void Part_2_CustomerItemDetail_InitializeDataWorkspace(List<IDataService> saveChangesTo)
    // Write your code here.
    this.FindControl(_CONTROL).ControlAvailable += Orders_ControlAvailable;
    private void Orders_ControlAvailable(object sender, ControlAvailableEventArgs e)
    _ItemsList = e.Control as DataGrid;
    //if the cast failed, just leave, there's nothing more we can do here
    if (_ItemsList == null)
    return;
    //set the property on the grid that allows multiple selection
    _ItemsList.SelectionMode = DataGridSelectionMode.Extended;
    _ItemsList.SelectionChanged += new SelectionChangedEventHandler(_ItemsList_SelectionChanged);
    private void _ItemsList_SelectionChanged(object sender, SelectionChangedEventArgs e)
    switch (_ItemsList == null)
    case true:
    _SelectedRowsCount = 0;
    break;
    case false:
    _SelectedRowsCount = _ItemsList.SelectedItems.Count;
    break;
    partial void Send_Multiple_Mail_CanExecute(ref bool result)
    //only enable rows have actually been selected
    result = (_SelectedRowsCount > 0);
    partial void Send_Multiple_Mail_Execute()
    if (_ItemsList == null) { return; }
    //StringBuilder names = new StringBuilder();
    //loop through the selected rows
    //we're casting each selected row as a DemoItem
    //so we get access to all the properties of the entity that the row represents
    foreach (_ItemsList.SelectedItems)
    vw_CustLedgerEntryItem1 entryItem = this.vw_CustLedgerEntry.SelectedItem;
    InvSendbyMailRequestBody reqBody = new InvSendbyMailRequestBody(
    entryItem.Document_No_
    , entryItem.Report_Type
    , "DynNavXYZ"
    , this.Application.User.Name.Replace(@"HRS\", "") + "@hrs.com" // HRS001
    , "Document"
    , false
    , false
    , this.vw_CustomerItem.ISO_Code // Change 7.8.2014 Bug in Email body text sprache
    , this.vw_CustomerItem.Salesperson_E_mail // Change 7.8.2014 Bug in Send E-mail
    , entryItem.Customer_No_.ToString()
    , false
    , "XYZ"
    , false);
    InvSendbyMailRequest req = new InvSendbyMailRequest(reqBody);
    XYZReportServiceSoapClient wsHRS = new HRSReportServiceSoapClient();
    // wsHRS.InvSendbyMailCompleted += new EventHandler<InvSendbyMailCompletedEventArgs>(wsHRS_InvGetPDFCompleted);
    wsHRS.InvSendbyMailAsync(req);
    this.ShowMessageBox("Your email was successfully sent");

  • Help req : alv grid with multiple row selection

    Hi all sap gurus,
    i have a alv list display program , in which i can select the o/p rows(multiple rows)
    and perform some actiom based on some icons .
    now i have to convert this in to grid display
    this is initial code i.e for list
    DATA :  BEGIN OF itab OCCURS 0.
            INCLUDE STRUCTURE ztest.
    DATA :  checkbox type c.
    DATA : END OF itab.
    s_layout-box_fieldname = 'CHECKBOX'.
      ty_events-name = slis_ev_top_of_page.
      ty_events-form =  'TOP_OF_PAGE'.
      APPEND ty_events TO it_events.
    ALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
           EXPORTING
                i_program_name     = v_repid
                i_internal_tabname = 'ITAB'
                i_inclname         = v_repid
           CHANGING
                ct_fieldcat        = build_fieldcatalog.
    CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
         EXPORTING
       I_INTERFACE_CHECK              = ' '
       I_BUFFER_ACTIVE                = ' '
         i_callback_program             = v_repid
         i_callback_pf_status_set       = 'SET_PF_STATUS'
         i_callback_user_command        = 'USER_COMMAND'
         i_structure_name               = 'ITAB'
         is_layout                      = s_layout
         it_fieldcat                    = build_fieldcatalog[]
       IT_EXCLUDING                   =
       IT_SPECIAL_GROUPS              =
       IT_SORT                        =
       IT_FILTER                      =
       IS_SEL_HIDE                    =
       I_DEFAULT                      = 'X'
       I_SAVE                         = ' '
       IS_VARIANT                     =
         it_events                      = 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
    IMPORTING
       E_EXIT_CAUSED_BY_CALLER        =
       ES_EXIT_CAUSED_BY_USER         =
          TABLES
            t_outtab                    = itab
         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.
    FORM user_command USING ucomm LIKE sy-ucomm
    selfield TYPE slis_selfield.
      IF ucomm = 'DELE'.
        LOOP AT iTAB WHERE CHECKbox = 'X' .
        ENDLOOP.
        MODIFY  ztEST FROM TABLE itAB.
      ENDIF.
      selfield-refresh = 'X'.
    ENDFORM.
    NOW I HAVE A LIST O/P WHERE I CAN SELECT THE BOX AND CLICK DELETE ICON.
    NOW I WANT TO CHANGE TO GRID, SO I KEPT EVERYTHING SAMRE AND I CHANGED  " LIST" TO "GRID"
    NOW TWO THINGS HAPPEND
    1) I SEE A EMPTY COLUMN IN THE O/P , I GUESS THATS BECAUSE CHECKBOSX IN INTERNAL TABLE , SO I REMOVED IT
    SO THIS MADE ME TO REMOVE
    IF ucomm = 'DELE'.
        LOOP AT iTAB." WHERE CHECKbox = 'X' .------PROBLEM
        ENDLOOP.
        MODIFY  ztEST FROM TABLE itAB.
      ENDIF.
      selfield-refresh = 'X'.
    NOW I DON'T SEE THE EMPTY COLUMN , BUT NOW PROBLEM  IS I CANNNOT DISTINGUISH AS TO WHICH IS SELECTED AND AT ANY POINT OF TIME I CANSELECT ONLY ROW.
    ALL I WANT IS
    1) I WANT TO SELECT MULTIPLE ROWS AND SHOULD BE ABLE TO KNOW WHICH ROWS WERE SELECTED IN THE O/P SCREEN.
    IN THE LIST DISPLAY I HAD CHECKBOX = 'X' FOR ALL THE ROWS THAT WERE SELECTED , I WANT THE SIMILAR THING in grid display
    LET ME KNOW whether this can be done without USING 00 LANG.
    thanks

    Hi Swati,
    Below code might help full for you. Description: is It selects multiple rows from ALV and display it on the next ALV.
    *************************Reward Point If help full********************************************
    *& Report   z7cc_alv_oops_show_next_alv                                *
    *&          DEVELOPERS NAME : CHIDANAND CHAUHAN
    *&          DATE: SATURDAY 08-07-2006
    *&          DESCRIPTION: TO CREATE AN OBJECT ORIENTED ALV
    REPORT      z7cc_alv_oops_show_next_alv MESSAGE-ID  z5hs .
    DATA : BEGIN OF it_mara OCCURS 0,
      mark  TYPE flag,
      matnr TYPE matnr,
      mtart TYPE mtart,
      meins TYPE meins,
    END OF it_mara.
    DATA : BEGIN OF it_mara1 OCCURS 0,
    *  mark  type flag,
      matnr TYPE matnr,
      mtart TYPE mtart,
      meins TYPE meins,
    END OF it_mara1.
    DATA : BEGIN OF it_mara2 OCCURS 0,
    *  mark  type flag,
      matnr TYPE matnr,
      mtart TYPE mtart,
      meins TYPE meins,
    END OF it_mara2.
    DATA : t_fieldcat TYPE lvc_t_fcat,
             t_fieldcat1 TYPE lvc_t_fcat,
          s_fieldcat LIKE LINE OF t_fieldcat.
    DATA : s_layout TYPE lvc_s_layo.
    DATA : control TYPE REF TO cl_gui_custom_container,
           grid  TYPE REF TO cl_gui_alv_grid.
    DATA: BEGIN OF wa ,
      mark  TYPE flag,
      matnr TYPE matnr,
      mtart TYPE mtart,
      meins TYPE meins,
    END OF wa.
    *       CLASS lcl_events_box DEFINITION
    CLASS lcl_events_box DEFINITION.
      PUBLIC SECTION.
        METHODS :
    *Handler_Data_Changed for event Data_Changed of cl_gui_alv_grid
    *imporTing er_data_changed,
        handler_user_command FOR EVENT user_command OF cl_gui_alv_grid
        IMPORTING e_ucomm,
        handler_toolbar FOR EVENT toolbar OF cl_gui_alv_grid
        IMPORTING e_object e_interactive.
    ENDCLASS.                    "lcl_events_box DEFINITION
    *       CLASS lcl_events_box IMPLEMENTATION
    CLASS lcl_events_box IMPLEMENTATION.
    * method to handle the user command.
      METHOD handler_user_command.
        PERFORM form_usercommand CHANGING e_ucomm.
      ENDMETHOD.                    "Handler_user_command
    *& Mehod to handle the toolbar.
      METHOD handler_toolbar.
        PERFORM form_toolbar CHANGING e_object e_interactive
        e_object->mt_toolbar.
      ENDMETHOD.                    "Handler_ToolBar
    ENDCLASS.                    "lcl_events_box IMPLEMENTATION
    START-OF-SELECTION.
      DATA : w_events TYPE REF TO lcl_events_box.
      SELECT matnr mtart meins FROM mara INTO CORRESPONDING FIELDS OF TABLE
      it_mara.
      CALL SCREEN 100.
    *&      Module  pbo_module  OUTPUT
    *       text
    MODULE pbo_module OUTPUT.
      IF grid IS INITIAL.
        CREATE OBJECT control
          EXPORTING
            container_name     = 'CUST_CTRL'.
        CREATE OBJECT grid
          EXPORTING
            i_parent          = control.
        PERFORM build_catalog.
        PERFORM build_catalog1.
        PERFORM build_layout.
        CALL METHOD grid->set_table_for_first_display
          EXPORTING
            is_layout       = s_layout
          CHANGING
            it_outtab       = it_mara[]
            it_fieldcatalog = t_fieldcat.
        CREATE OBJECT w_events.
        SET HANDLER : w_events->handler_toolbar FOR grid,
                      w_events->handler_user_command FOR grid.
        CALL METHOD grid->set_toolbar_interactive.
      ELSE.
        CALL METHOD grid->refresh_table_display.
      ENDIF.
    ENDMODULE.                 " pbo_module  OUTPUT
    *&      Form  BUILD_CATALOG
    FORM build_catalog .
      s_fieldcat-col_pos = '1'.
      s_fieldcat-fieldname = 'MARK'.
      s_fieldcat-checkbox = 'X'.
      s_fieldcat-edit = 'X'.
      APPEND s_fieldcat TO t_fieldcat.
      CLEAR s_fieldcat.
      s_fieldcat-col_pos = '2'.
      s_fieldcat-fieldname = 'MATNR'.
      s_fieldcat-scrtext_m = 'MATERIAL'.
      APPEND s_fieldcat TO t_fieldcat.
      s_fieldcat-col_pos = '3'.
      s_fieldcat-fieldname = 'MTART'.
      s_fieldcat-scrtext_m = 'MATERL TYPE'.
      APPEND s_fieldcat TO t_fieldcat.
      s_fieldcat-col_pos = '4'.
      s_fieldcat-fieldname = 'MEINS'.
      s_fieldcat-scrtext_m = 'UOM'.
      APPEND s_fieldcat TO t_fieldcat.
    ENDFORM.                    " BUILD_CATALOG
    *&      Form  BUILD_LAYOUT
    *       text
    *  -->  p1        text
    *  <--  p2        text
    FORM build_layout .
      s_layout-zebra = 'X'.
    * S_LAYOUT-CWIDTH_OPT = 'X'.
      s_layout-grid_title = 'Material Details'.
    ENDFORM.                    "BUILD_LAYOUT
    " BUILD_LAYOUT////////////////////////////////////
    " USER_COMMAND_0100  INPUT
    *&      Form  FORM_USERCOMMAND
    *       text
    *      <--P_E_UCOMM  text
    FORM form_usercommand  CHANGING p_e_ucomm.
      CASE p_e_ucomm.
        WHEN 'INT1'.
          DO.
            READ TABLE it_mara INDEX sy-index TRANSPORTING mark matnr.
            IF sy-subrc <> 0.
              EXIT.
            ENDIF.
            IF it_mara-mark = 'X'.
              READ TABLE it_mara INTO wa TRANSPORTING matnr mtart meins .
              MOVE-CORRESPONDING wa TO it_mara1.
              READ TABLE it_mara1 TRANSPORTING matnr mtart meins .
              MOVE-CORRESPONDING it_mara1  TO it_mara2.
              APPEND it_mara2.
              CALL METHOD grid->set_table_for_first_display
                EXPORTING
                  is_layout       = s_layout
                CHANGING
                  it_outtab       = it_mara2[]
                  it_fieldcatalog = t_fieldcat1.
    *       SET PARAMETER ID 'MAT' FIELD IT_MARA-MATNR.
    *       CALL TRANSACTION 'MM02'.
            ENDIF.
    *      ENDIF.
          ENDDO.
      ENDCASE.
    ENDFORM.                    " FORM_USERCOMMAND
    *&      Form  FORM_TOOLBAR
    *       text
    *      <--P_E_OBJECT  text
    *      <--P_E_INTERACTIVE  text
    *      <--P_E_OBJECT_>MT_TOOLBAR  text
    FORM form_toolbar  CHANGING p_e_object TYPE REF TO
    cl_alv_event_toolbar_set
    p_e_interactive
    mt_toolbar TYPE ttb_button.
      DATA wal_button TYPE stb_button.
    *WAL_BUTTON-ICON = ICON_status_reverse.
      wal_button-text = 'GO'.
      wal_button-quickinfo = 'PROCEED'.
      wal_button-function = 'INT1'.
      wal_button-butn_type = 0.
      wal_button-disabled = space.
      INSERT wal_button  INTO p_e_object->mt_toolbar INDEX 1.
    ENDFORM.                    " FORM_TOOLBAR
    *&      Module  PF-STATUS  OUTPUT
    *       text
    MODULE pf-status OUTPUT.
      SET PF-STATUS 'Z7CCSTAT'.
    ENDMODULE.                 " PF-STATUS  OUTPUT
    *&      Module  USER_COMMAND_0100  INPUT
    *       text
    MODULE user_command_0100 INPUT.
      CASE sy-ucomm.
        WHEN 'BACK'.
          LEAVE PROGRAM.
        WHEN 'CANCEL'.
          LEAVE PROGRAM.
      ENDCASE.
    ENDMODULE.                 " USER_COMMAND_0100  INPUT
    *&      Form  BUILD_CATALOG1
    *       text
    *  -->  p1        text
    *  <--  p2        text
    FORM build_catalog1 .
      s_fieldcat-col_pos = '1'.
      s_fieldcat-fieldname = 'MATNR'.
      s_fieldcat-scrtext_m = 'MATERIAL'.
      APPEND s_fieldcat TO t_fieldcat1.
      s_fieldcat-col_pos = '2'.
      s_fieldcat-fieldname = 'MTART'.
      s_fieldcat-scrtext_m = 'MATERL TYPE'.
      APPEND s_fieldcat TO t_fieldcat1.
      s_fieldcat-col_pos = '3'.
      s_fieldcat-fieldname = 'MEINS'.
      s_fieldcat-scrtext_m = 'UOM'.
      APPEND s_fieldcat TO t_fieldcat1.
    ENDFORM.                    " BUILD_CATALOG1

  • Help: multiple-row subquery

    Hi,
    My question hinges off the same type of DB as the question asked on here a little while back (https://forums.oracle.com/thread/1982906).
    The specific question is: Determine which author or authors wrote the books most frequently purchased by customers of JustLee Books
    I am trying to build a multiple-row subquery (I'm not sure if this would be the best way to approach). I supplied the table at the bottom of this post.
    Per my code below, as you can see, this is not working for me. I'm trying to pull the total count of each book (via isbn inside table authorid), then I'll look-up the author code and ultimately the author's name (table orderitems then bookauthor) . I'm working from the inside out, and cannot get past using the first subquery.
    Could someone please be able to help point me in the right direction?
    Thanks for your help!
    SQL> SELECT isbn, authorid 
      2  FROM bookauthor
      3  WHERE isbn IN (SELECT COUNT(isbn)
      4                                FROM orderitems
      5                                GROUP BY isbn)
      6  ORDER BY isbn, authorid;
    no rows selected
    TABLES:
    SQL> select * from orderitems;
        ORDER#      ITEM# ISBN         QUANTITY   PAIDEACH                                                                           
          1000          1 3437212490          1      19.95                                                                           
          1001          1 9247381001          1      31.95                                                                           
          1001          2 2491748320          1      85.45                                                                           
          1002          1 8843172113          2      55.95                                                                           
          1003          1 8843172113          1      55.95                                                                           
          1003          2 1059831198          1      30.95                                                                           
          1003          3 3437212490          1      19.95                                                                           
          1004          1 2491748320          2      85.45                                                                           
          1005          1 2147428890          1      39.95                                                                           
          1006          1 9959789321          1       54.5                                                                           
          1007          1 3957136468          3      72.15                                                                           
          1007          2 9959789321          1       54.5                                                                           
          1007          3 8117949391          1       8.95                                                                           
          1007          4 8843172113          1      55.95                                                                           
          1008          1 3437212490          2      19.95                                                                           
          1009          1 3437212490          1      19.95                                                                           
          1009          2 0401140733          1         22                                                                           
          1010          1 8843172113          1      55.95                                                                           
          1011          1 2491748320          1      85.45                                                                           
          1012          1 8117949391          1       8.95                                                                           
          1012          2 1915762492          2         25                                                                           
          1012          3 2491748320          1      85.45                                                                           
          1012          4 0401140733          1         22                                                                           
          1013          1 8843172113          1      55.95                                                                           
          1014          1 0401140733          2         22                                                                           
          1015          1 3437212490          1      19.95                                                                           
          1016          1 2491748320          1      85.45                                                                           
          1017          1 8117949391          2       8.95                                                                           
          1018          1 3437212490          1      19.95                                                                           
          1018          2 8843172113          1      55.95                                                                           
          1019          1 0401140733          1         22                                                                           
          1020          1 3437212490          1      19.95
    SQL> select * from bookauthor;
    ISBN       AUTH
    0132149871 S100
    0299282519 S100
    0401140733 J100
    1059831198 P100
    1059831198 S100
    1915762492 W100
    1915762492 W105
    2147428890 W105
    2491748320 B100
    2491748320 F100
    2491748320 R100
    3437212490 B100
    3957136468 A100
    4981341710 K100
    8117949391 R100
    8843172113 A100
    8843172113 A105
    8843172113 P105
    9247381001 W100
    9959789321 J100
    20 rows selected.
    SQL> select * from author;
    AUTH LNAME      FNAME
    S100 SMITH      SAM
    J100 JONES      JANICE
    A100 AUSTIN     JAMES
    M100 MARTINEZ   SHEILA
    K100 KZOCHSKY   TAMARA
    P100 PORTER     LISA
    A105 ADAMS      JUAN
    B100 BAKER      JACK
    P105 PETERSON   TINA
    W100 WHITE      WILLIAM
    W105 WHITE      LISA
    R100 ROBINSON   ROBERT
    F100 FIELDS     OSCAR
    W110 WILKINSON  ANTHONY
    14 rows selected.

    a35c130d-ca92-46ca-8177-8a8b5ee02876 wrote:
    Hi,
    My question hinges off the same type of DB as the question asked on here a little while back (https://forums.oracle.com/thread/1982906).
    The specific question is: Determine which author or authors wrote the books most frequently purchased by customers of JustLee Books
    I am trying to build a multiple-row subquery (I'm not sure if this would be the best way to approach). I supplied the table at the bottom of this post.
    Per my code below, as you can see, this is not working for me. I'm trying to pull the total count of each book (via isbn inside table authorid), then I'll look-up the author code and ultimately the author's name (table orderitems then bookauthor) . I'm working from the inside out, and cannot get past using the first subquery.
    Could someone please be able to help point me in the right direction?
    Thanks for your help!
    SQL> SELECT isbn, authorid 
      2  FROM bookauthor
      3  WHERE isbn IN (SELECT COUNT(isbn)
      4                                FROM orderitems
      5                                GROUP BY isbn)
      6  ORDER BY isbn, authorid;
    no rows selected
    TABLES:
    SQL> select * from orderitems;
        ORDER#      ITEM# ISBN         QUANTITY   PAIDEACH                                                                          
          1000          1 3437212490          1      19.95                                                                          
          1001          1 9247381001          1      31.95                                                                          
          1001          2 2491748320          1      85.45                                                                          
          1002          1 8843172113          2      55.95                                                                          
          1003          1 8843172113          1      55.95                                                                          
          1003          2 1059831198          1      30.95                                                                          
          1003          3 3437212490          1      19.95                                                                          
          1004          1 2491748320          2      85.45                                                                          
          1005          1 2147428890          1      39.95                                                                          
          1006          1 9959789321          1       54.5                                                                          
          1007          1 3957136468          3      72.15                                                                          
          1007          2 9959789321          1       54.5                                                                          
          1007          3 8117949391          1       8.95                                                                          
          1007          4 8843172113          1      55.95                                                                          
          1008          1 3437212490          2      19.95                                                                          
          1009          1 3437212490          1      19.95                                                                          
          1009          2 0401140733          1         22                                                                          
          1010          1 8843172113          1      55.95                                                                          
          1011          1 2491748320          1      85.45                                                                          
          1012          1 8117949391          1       8.95                                                                          
          1012          2 1915762492          2         25                                                                          
          1012          3 2491748320          1      85.45                                                                          
          1012          4 0401140733          1         22                                                                          
          1013          1 8843172113          1      55.95                                                                          
          1014          1 0401140733          2         22                                                                          
          1015          1 3437212490          1      19.95                                                                          
          1016          1 2491748320          1      85.45                                                                          
          1017          1 8117949391          2       8.95                                                                          
          1018          1 3437212490          1      19.95                                                                          
          1018          2 8843172113          1      55.95                                                                          
          1019          1 0401140733          1         22                                                                          
          1020          1 3437212490          1      19.95
    SQL> select * from bookauthor;
    ISBN       AUTH
    0132149871 S100
    0299282519 S100
    0401140733 J100
    1059831198 P100
    1059831198 S100
    1915762492 W100
    1915762492 W105
    2147428890 W105
    2491748320 B100
    2491748320 F100
    2491748320 R100
    3437212490 B100
    3957136468 A100
    4981341710 K100
    8117949391 R100
    8843172113 A100
    8843172113 A105
    8843172113 P105
    9247381001 W100
    9959789321 J100
    20 rows selected.
    SQL> select * from author;
    AUTH LNAME      FNAME
    S100 SMITH      SAM
    J100 JONES      JANICE
    A100 AUSTIN     JAMES
    M100 MARTINEZ   SHEILA
    K100 KZOCHSKY   TAMARA
    P100 PORTER     LISA
    A105 ADAMS      JUAN
    B100 BAKER      JACK
    P105 PETERSON   TINA
    W100 WHITE      WILLIAM
    W105 WHITE      LISA
    R100 ROBINSON   ROBERT
    F100 FIELDS     OSCAR
    W110 WILKINSON  ANTHONY
    14 rows selected.
    with
       iisbn as (      select isbn, count(isbn) cnt from orderitems group by isbn )
    SELECT ii.isbn, ba.authorid, ii.cnt
      FROM bookauthor ba, iisbn ii
    where ba.isbn = ii.isbn

  • Easy Question: How to split concatenated string into multiple rows?

    Hi folks,
    this might be an easy question.
    How can I split a concatenated string into multiple rows using SQL query?
    INPUT:
    select 'AAA,BBB,CC,DDDD' as data from dualDelimiter = ','
    Expected output:
    data
    AAA
    BBB
    CCC
    DDDDI'm looking for something kind of "an opposite for 'sys_connect_by_path'" function.
    Thanks,
    Tomas

    Here is the SUBSTR/INSTR version of the solution:
    SQL> WITH test_data AS
      2  (
      3          SELECT ',' || 'AAA,BBB,CC,DDDD' || ',' AS DATA FROM DUAL
      4  )
      5  SELECT  SUBSTR
      6          (
      7                  DATA
      8          ,       INSTR
      9                  (
    10                          DATA
    11                  ,       ','
    12                  ,       1
    13                  ,       LEVEL
    14                  ) + 1
    15          ,       INSTR
    16                  (
    17                          DATA
    18                  ,       ','
    19                  ,       1
    20                  ,       LEVEL + 1
    21                  ) -
    22                  INSTR
    23                  (
    24                          DATA
    25                  ,       ','
    26                  ,       1
    27                  ,       LEVEL
    28                  ) - 1
    29          )       AS NEW_STRING
    30  FROM    test_data
    31  CONNECT BY LEVEL <= LENGTH(REGEXP_REPLACE(DATA,'[^,]','')) - 1
    32  /
    NEW_STRING
    AAA
    BBB
    CC
    DDDD

  • Insert multiple rows question

    Hi!
    I need to insert multiple rows into a table with one run, but each row must have its unique id(PK). There is a sequence and a trigger
    in our database (11gR1) that get the next value. So, my question is: Is it possible to do a "bulk insert", maybe with a for loop cursor?
    Thanks for your feedback!

    user545194 wrote:
    Hi!
    I need to insert multiple rows into a table with one run, but each row must have its unique id(PK). There is a sequence and a trigger
    in our database (11gR1) that get the next value. So, my question is: Is it possible to do a "bulk insert", maybe with a for loop cursor?No need for a loop cursor, just insert the rows using an INSERT ... SELECT ... statement. If you have a row based trigger putting a sequence on the rows then it will allocated the id's accordingly.

  • Please - immediate help needed parsing csv values into multiple rows

    Hello, we have a very immediate need to be able to parse out a field of comma separated values into individual rows. The following is an example written in SQL Server syntax which does not work in Oracle.
    The tricky part is that each ROUTES can be a different length, and each CSV can have a different number of routes in it.
    Here is an example of the table ("Quotes") of CSV values I want to normalize:
    TPNUMBER ROUTES
    1001 1, 56W, 18
    1002 2, 16, 186, 28
    Here is an example of what I need it to look like:
    TPNUMBER ROUTES
    1001 1
    1001 56W
    1001 18
    1002 2
    1002 16
    1002 186
    1002 28
    Here is the "Tally" table for the query below:
    ID
    1
    2
    3
    4
    5
    6
    7
    And finally, here is the query which parses CSV values into multiple rows but which does not work in Oralce:
    SELECT TPNUMBER,
    NullIf(SubString(',' + ROUTES + ',' , ID , CharIndex(',' , ',' + ROUTES + ',' , ID) - ID) , '') AS ONEROUTE
    FROM Tally, Quotes
    WHERE ID <= Len(',' + ROUTES + ',') AND SubString(',' + Phrase + ',' , ID - 1, 1) = ','
    AND CharIndex(',' , ',' + ROUTES + ',' , ID) - ID > 0
    It may be necessary to use a cursor to loop through the CSV table and process each row (a loop within another loop...) but this is beyond my comprehesion of PL/SQL.
    Many thanks in advance for your advice/help.
    apk

    Not sure what you are trying to do with the last step, but this should work for the first part. I assume you would use sqlldr but I just did inserts instead. You might need more than 5 "routes" in the csv. You could put some reasonable max on that number of columns:
    SQL>create table t_csv
    2 (TPNUMBER varchar2(20),
    3 ROUTE_1 VARCHAR2(5),
    4 ROUTE_2 VARCHAR2(5),
    5 ROUTE_3 VARCHAR2(5),
    6 ROUTE_4 VARCHAR2(5),
    7 ROUTE_5 VARCHAR2(5),
    8 ROUTE_6 VARCHAR2(5) );
    Table created.
    SQL>INSERT INTO t_csv (TPNUMBER,ROUTE_1,ROUTE_2) values( '1001 1', '56W', '18' );
    1 row created.
    SQL>INSERT INTO t_csv (TPNUMBER,ROUTE_1,ROUTE_2,ROUTE_3) values( '1002 2', '16', '186', '28');
    1 row created.
    SQL>create table t_quotes(
    2 tpnumber NUMBER,
    3 routes VARCHAR2(5));
    Table created.
    SQL>DECLARE
    2 L_tpnumber NUMBER;
    3 L_route VARCHAR2(5);
    4 begin
    5 for rec in (select * from t_csv) loop
    6 L_tpnumber := SUBSTR(rec.tpnumber,1,INSTR(rec.tpnumber,' ')-1);
    7 L_route := SUBSTR(rec.tpnumber,INSTR(rec.tpnumber,' ')+1);
    8 insert into t_quotes values( L_tpnumber, l_route );
    9 if rec.route_1 is not null then
    10 insert into t_quotes values( L_tpnumber, rec.route_1 );
    11 end if;
    12 if rec.route_2 is not null then
    13 insert into t_quotes values( L_tpnumber, rec.route_2 );
    14 end if;
    15 if rec.route_3 is not null then
    16 insert into t_quotes values( L_tpnumber, rec.route_3 );
    17 end if;
    18 if rec.route_4 is not null then
    19 insert into t_quotes values( L_tpnumber, rec.route_4 );
    20 end if;
    21 if rec.route_5 is not null then
    22 insert into t_quotes values( L_tpnumber, rec.route_5 );
    23 end if;
    24 end loop;
    25 end;
    26 /
    PL/SQL procedure successfully completed.
    SQL> select tpnumber, routes from t_quotes;
    TPNUMBER ROUTE
    1001 1
    1001 56W
    1001 18
    1002 2
    1002 16
    1002 186
    1002 28
    7 rows selected.

  • Multiple rows insertion - need help

    Hello all,
    I need to insert multiple rows in a table with a single query and the number of rows is 269470.
    There are 3 columns in the table. One of the columns is determined by another sub query which returns multilple(269470) rows and the other 2 columns remain same for all.
    I came up with the following query but need a loop to make it run multiple time(269470 times).
    insert into EMLUSRRECV
    (user_id, storeent_id, receiveml)
    values
    ((select user_id from users where user_id not in (select distinct user_id from EMLUSRRECV) and CURR = 'USD' and rownum = 1), 11154, 1);
    Thanks in advance.
    Edited by: 924585 on Feb 20, 2013 7:19 PM

    924585 wrote:
    Hello all,
    I need to insert multiple rows in a table with a single query and the number of rows is 269470.
    There are 3 columns in the table. One of the columns is determined by another sub query which returns multilple(269470) rows and the other 2 columns remain same for all.
    I came up with the following query but need a loop to make it run multiple time(269470 times).
    insert into EMLUSRRECV
    (user_id, storeent_id, receiveml)
    values
    ((select user_id from users where user_id not in (select distinct user_id from EMLUSRRECV) and CURR = 'USD' and rownum = 1), 11154, 1);
    Thanks in advance.
    Edited by: 924585 on Feb 20, 2013 7:19 PMwhy not just:
    insert into emlusrrecv
    select user_id, 11154, 1
      from  users
    where user_id not in (select user_id from EMLUSRRECV)
    and CURR = 'USD' and rownum = 1)

  • Help :add multiple rows from Resultset to ArrayList ?

    My query returns one column and multiple rows. In Java code , I am trying to get this data in array or arraylist through ResultSet
    ex:
    item_num
    p001
    p002
    p003
    when I print, it only gets the item in the first row.
    ArrayList myArrayList = new ArrayList();
    resultset = preparedstatement.executeQuery();
    if (resultset.next())
    myArrayList.add(new String(resultset.getString("item_num")));
    Print:
    for (int j = 0 ; j < myArrayList.size() ; j++ )
    System.out.println((String)myArrayList.get(j)); --this prints only the first item.
    can someone assist ?

    changing if to while fixed it.

  • You can help :  processing multiple rows in ejb

    Hi How can i process multiple rows in an ejb. An entity bean represents one row but i need to retrieve all rows from DB Table. Can i do that? how ?
    if we use session beans, we need each connection for each ejb. Is there a way to use one DB connection by all my beans?

    Mr.Raja Sekhar, thanks for u r reply. my application
    has about 100 ejbs and the site has around million
    users. when that many users are coming, my
    database(MS-SQL) is blocking due to connections i
    think. can u or any one suggest what to do for this.100 EJBs?!? :O)

  • Multiple row update of a table from another one

    Im trying to make a multiple row update with date from a different table, but it's giving me an error.
    update inv.mtl_system_items_b
    set attribute1 = t2.description,
        last_update_date = SYSDATE,
        last_updated_by = 3606
    from inv.mtl_system_items_b t2
         inner join TMP.TMP_INACTIVAR_PRODUCTOS t1
         on t2.segment2 = t1.inventory_item_id;Edited by: user8986013 on 21-may-2010 14:15

    Hi,
    Whenever you have a question involving an error message, post the complete error message, including line number. Don't you think that might help people solve your problem?
    Whneve you have any question, post a little sample data (CREATE TABLE and INSERT statements) and the results you want from that data. (In the case of a DM<L statement, like UPDATE, the INSERT statements show the tables before the change, and the results are the contents of the changed table after it.)
    Review the syntax of the UPDATE statement in the SQL Language manual:
    http://download.oracle.com/docs/cd/B28359_01/server.111/b28286/statements_10008.htm#sthref9598
    MERGE may be more efficient and easier to use than UPDATE.

  • Query for Multiple Rows as XML

    Ok I've seen this topic in the forums, but have failed to get this to work within my process. Basically I have a process that has a user fill out a form, and upon submittal the form writes it's information to a database (via a data connection within the form that invokes a separate process upon submittal.), once this is done the main process is invoked and it's first step is to query that same database and bring back the data in a lower (now exposed) portion of the form that contains certain fields that track the issue history. The query brings back the xml document and I store it in an xml variable (xml_output). I then take this information and use the Set Value object to assign the returned nodes values to the location fields in the form. This works if the query returns only one row. But once the form is moved beyond the initial Task Assignment, (first user), and query returns more than just one row, the added nodes to not show up on the form, i.e I still just get information about the first row in my form. From what I've read the form should be able to recognize the xpath expression, and bring back all the nodes, by in a sense using instance manager to create an instance for each node on the form. My question is how can I get this to work. Jasmin if your still out there... Help!
    Also We're using Adobe LiveCycle ES 8.0
    created the process using Workbench
    the form was reader enabled and saved as a dynamic PDF.
    Thanks
    Mike

    Ok have done the binding of the schema to the form, and I'm getting the information to flow as it's supposed to.  The problem I'm having now, (I know I'm having a bunch.) is that once I've placed the form into my process, and I use the set value operation to pre-fill information I get the form to flow, but the rest of the information that was previously filled in is blank.  So I have checked the variable and nothing wrong there.  It appears the problem is how I'm using the set value operation.  If I don't use the set value operation, the form retains it's information.  And if I use the set value by trying to set the subform value, the form retains it's information, but no pre-fill.  I'm going to try to be a little more detailed here.  The xml that is returned looks like this:
            0016-03-30
            Mike
            Public Works
            alone in the dark
            Type sleep
            -1
            Council
            FYI
            Important
    Flowed and positioned are actual subforms on the form that have their properties set as their names indicates.  The entire path is /form1/Page1/flowed/positioned .  The way I was able to get the form to flow correctly upon the injection of this xml data, was to bind the subforms in the form in this manner, positioned[*].  Designer didn't place the [*] for me so I had to do this myself.  But once I previewed the document, the form pre-populated and created the necessary number of subforms and placed information into the fields correctly.
    Now on the process side, I have created an xfaform variable that stores the form (bound to xsd.)  information, and another xml variable that stores the query return that looks like the xml listed above (has an xsd associated with it for navigating xpath).  My first operation performs the query (JDBC- Query Multiple Rows as XML) and stores it into the xml variable.  The next step of the process is the Set Value operation which is supposed to inject the xml data retrieved from the query into the form.  Initially I tried the an xpath similar to the following:
    /process_data/object/data/form1/page1/flowed/positioned = /xml_data/flowed/positioned.
    No dice.  On this one the form retains the information filled out by the user (didn't explain this earlier, the form is filled out first, and upon submittal the process starts.), but doesn't pre-populate the bottom part of the form.  Next I tried the following xpath:
    /process_data/object/data/form1/page1/flowed = /xml_data/flowed/positioned.
    This time it retained the form information which was filed in by the user, but the bottom part is becomes hidden!  Didn't understand this.  But I started to kinda think that I had to navigate he xpath in order to correctly inject the xml into the form.  That being said my next attempt was:
    /process_data/object/data/form1/page1 = /xml_data
    My thinking was that if on location, I stop at page1, the xml in the variable will allow it to navigate correctly through the form.  Well it worked, but too well.  The top part of the form is blank, but the bottom portion is pre-populated correctly.  Now I'm stuck.  Not sure how to get the rest of the information in the form.  I thought about creating variables form each of the fields and then re-populating them after the injection of xml, but that didn't seem practical.  I'm almost positive it's something I'm not doing correctly with xpath.  Anyway, thanks for all your help on this.
    Mike

Maybe you are looking for

  • Digital DIN no working (inspire 5700)

    hi.... i have some problem here, when i use digital connnection (digital DIN) connect to my soundblaster audigy, and switch to digital output, but it no sound at all, i only able to use analog connection now. is that the decoder problem or my soundca

  • Without Decode or Case

    I have emp_allocation table. It has data as below EMPID     YEAR      MONTH X     2006     JAN X     2006     MAR Y     2006     JAN Y     2006     FEB Y     2006     MAR I want SQL Query(Without Decode or Case) which will give output as below EMPID 

  • How to pass date in SQL Report

    Hi All, I am trying to create a SQL report which contains the following in the where clause: and A.RESP_DATE >= to_date('01/01/2010','MM/DD/YYYY') BIP does not seem to like this and is not processing the report. If I remove this clause the report is

  • CO period locked - can we unlock period and do COPA assessment?

    Hi Friends, CO period has been locked for last month, but some of the cost center assessment to COPA has not been carried out last month, resulting in amount lying in cost center itself. Could you please let me know whether we can unlock last month i

  • Selective IP filtering for multiple servers in a domain?

    Is it possible to have IP filtering on for certain servers in a domain, and not for others? This is the situation: I am deploying two servers in mydomain, so let's call it serverA and serverB. I want serverA to accept all connections while serverB ac