Need help to build SQl query

Employee_table
Emp_no Emp_name Location
100          Ram Mumbai
200 Shyam Delhi
300 Jadu Bangalore
400 Madhu Hyderabad
500 Sidhu Kolkata
Employee_Comm
Emp_no Comm_flag
100 COMM
300 NO COMM
500 COMM
Note - No entry for employee 200 and 400, meand commision independent
SQL - when input flag would be COMM the display employee records 100,500,200,400
when input flag would be NO COMM the display employee records 300,200,400
     when input flag would be NULL the display employee records 100,200,300,400,500

Ohh,
Thank Karthick! I have changed the SQL to meet the need
WITH EMPLOYEE_TABLE
AS
    SELECT 100 EMP_NO,'RAM' EMP_NAME,'MUMBAI' LOCATION FROM DUAL UNION ALL
    SELECT 200,'SHYAM','DELHI' FROM DUAL UNION ALL
    SELECT 300,'JADU','BANGALORE' FROM DUAL UNION ALL
    SELECT 400,'MADHU','HYDERABAD' FROM DUAL UNION ALL
    SELECT 500,'SIDHU','KOLKATA' FROM DUAL
), EMPLOYEE_COMM
AS
    SELECT 100 EMP_NO,'COMM' COMM_FLAG FROM DUAL UNION ALL
    SELECT 300,'NO COMM' FROM DUAL UNION ALL
    SELECT 500,'COMM' FROM DUAL
SELECT  E1.EMP_NO, EMP_NAME, LOCATION, COMM_FLAG
FROM    EMPLOYEE_TABLE E1, EMPLOYEE_COMM E2
WHERE   E1.EMP_NO = E2.EMP_NO (+)
        AND (COMM_FLAG = :COMM_FLAG OR COMM_FLAG IS NULL);
Note: Derived from Karthick's SQL
*009*

Similar Messages

  • SQL Gurus : Need Help in building SQL query

    SQL Gurus,
    Need your expertise to solve my below problem:
    - I have a column that had comma separated data, basically there are the levels in a hierarchy. eg The same column could have the following data:
    Row 1: R1L1, R1L2, R1L3
    Row 2: R2L1, R2L2
    Row 3: R3L1, R3L2, R3L3, R3L4
    For assumption purpose lets assume that there are maximum 5 Levels
    I want to put this data from this column into another table which holds the levels. I am expecting the output in another table as follows:
    Col1____Col2 ____Col3____Col4____Col5
    Row 1: R1L1___R1L2____R1L3____null_____null
    Row 2: R2L1___R2L2____null_____null_____null
    Row 3: R3L1___R3L2____R3L3____R3L4___null
    How do i achieve this ? ie coverting the comma separated values in a column to separate columns. The # of values in each columns could be different as I have showb above
    Regards,
    pk

    with t as (
               select 'R1L1, R1L2, R1L3' c1 from dual union all
               select 'R2L1, R2L2' c1 from dual union all
               select 'R3L1, R3L2, R3L3, R3L4' c1 from dual
    select  substr(c1,instr(', ' || c1 || ', ',', ',1,mod(l,5) + 1),instr(', ' || c1 || ', ',', ',1,mod(l + 1,5) + 1) - instr(', ' || c1 || ', ',', ',1,mod(l,5) + 1) - 2) col1,
            substr(c1,instr(', ' || c1 || ', ',', ',1,mod(l - 1,5) + 1),instr(', ' || c1 || ', ',', ',1,mod(l,5) + 1) - instr(', ' || c1 || ', ',', ',1,mod(l - 1,5) + 1) - 2) col2,
            substr(c1,instr(', ' || c1 || ', ',', ',1,mod(l - 2,5) + 1),instr(', ' || c1 || ', ',', ',1,mod(l - 1,5) + 1) - instr(', ' || c1 || ', ',', ',1,mod(l - 2,5) + 1) - 2) col3,
            substr(c1,instr(', ' || c1 || ', ',', ',1,mod(l - 3,5) + 1),instr(', ' || c1 || ', ',', ',1,mod(l - 2,5) + 1) - instr(', ' || c1 || ', ',', ',1,mod(l - 3,5) + 1) - 2) col4,
            substr(c1,instr(', ' || c1 || ', ',', ',1,mod(l - 4,5) + 1),instr(', ' || c1 || ', ',', ',1,mod(l - 3,5) + 1) - instr(', ' || c1 || ', ',', ',1,mod(l - 4,5) + 1) - 2) col5
      from  (
             select  c1,
                     length(c1) - length(replace(c1,',')) + 5 l
               from  t
    COL1                   COL2                   COL3                   COL4                   COL5
    R1L3                   R1L2                   R1L1
    R2L2                   R2L1
    R3L4                   R3L3                   R3L2                   R3L1
    SQL> SY.

  • Need help in building a Query in AR -Daywise Report wih separate outstandin

    Hi,
    I need to build a report in AR (AR-Daywise Report with separte outstanding)
    How to proceeed with sql query for getting the AR-Daywise Report with separte outstanding?
    Any help will be needful for me
    Thanks and Regards

    Post your question in the the Financials forum, you may get a better/faster response.
    Financials
    Financials
    Thanks,
    Hussein

  • Need help in building search query

    Guys ..
    Problem Description:
    I have a huge table that is indexed using CONTEXT.
    I want to write a search query that considers the following:
    1. number of keywords match
    2. takes care of spelling mistakes, synonyms and acronyms
    3. proximity - the keywords should not be too far of each other.
    e.g. I have this phrase: "Horizontal Stabilizer Trim Brake"
    I was thinking of writing a query like:
    SELECT SCORE(1) SCORE,
    TEXT text
    FROM MY_TABLE
    WHERE CONTAINS(TEXT, '(Horz | Horizontal) ACCUM (Stab | Stabilier) ACCUM Trim ACCUM (Brk | Break)', 1) >= 0
    ORDER BY SCORE DESC
    The results doesnt look satisfactory. I have not used "near" operator as i dont know how to use it.
    Please help me as I am very much new to Oracle Text.
    -G

    Well, I'm not going to write the function for you, but we can at least talk through a general strategy.
    A lot depends on how you help your users on the front end -- for example, if they're searching a technical document, you may want to return results that aren't perfect matches but you do want to make sure the user picks 'mandatory' and 'useful' keywords in a way that lets you figure out which ones are really important. On the other hand, if you're google and have to handle queries like 'horizontal stabilizer trim brake' and 'were Pete and Jenny in the break room' then you run the risk of spending too much time looking for interesting words, almost doing a full-text search on the query trying to derive meaning.
    So I'm going to presume that you have some control over what/how the users generate their searches so that finding keywords isn't the issue.
    The plan will be to parse the query a bit to find the interesting words, clean them up, and weigh their importance, then use transformed data to build the query template to score various combinations.
    So here's some pseudocode for the function:
    function parse_query(pQueryWords in clob) returns clob as
    begin
        generate_token_list (); -- split the query into a set of individual tokens/words
        for each token in token_list
            if it's a mandatory word then accumtokenlist := accumtokenlist || ' ' || token ||'*10' -- weigh the presence of the token strongly
            if it's a useful word then accumtokenlist := accumtokenlist || ' ' || token ||'*5' -- domain-specific words are also important
            if it's a stopword or reserved word, then do not add it to the list
            if it's not on my lists, then accumtokenlist := accumtokenlist || ' ' || token
                                         and normaltokenlist := normaltokenlist ||' ' || token
        end;
        --so now, we have two lists, one for NEAR and one for ACCUM
        now build the guts of the template
            querytemplate := querytemplate || '<seq> || normaltokenlist || '</seq>';
            querytemplate := querytemplate || '<seq> || replace (accumtokenlist, ' ',' ACCUM ') || '</seq>';
            querytemplate := querytemplate || '<seq>$' || replace(normaltokenlist,' ','$') || '</seq>';
            querytemplate := querytemplate || '<seq>? || replace(replace(accumtokenlist,' ',' ?'),' ', ' accum ') || </seq>';  -- first fuzzy the words, then accum
            querytemplate := querytemplate || '<seq>? || replace(replace(normaltokenlist,' ',' ?'),' ', ' near ') || </seq>';  -- first fuzzy the words, then near
        return querytemplate
    end;So, with a 'cooked' query text that is template-friendly, all we need to do is apply a template that is aware of your inputs:
    query_Template_string := '
    <query>
       <textquery lang="ENGLISH" grammar="CONTEXT"> horizontal stabilizer*5 trim brake*10
         <progression> '
    || parse_query('horizontal stabilizer trim brake')  ||
    '     </progression>
       </textquery>
      <score datatype="INTEGER" algorithm="COUNT"/>'
    </query>So that's an example of one approach.

  • Newbie - need help with a SQL query for a bar chart

    Hi,
    I'm a new user on APEX with no real SQL knowledge and I'm trying to build a dashboard with charts into an existing APEX application. Based on another application, I have come up with the following SQL code:
    select null link
    , CATEGORY label
    , count (decode(PROJECT_STATUS,'1',PROJECT_ID))"Active"
    , count (decode(PROJECT_STATUS,'2',PROJECT_ID))"Complete"
    , count (decode(PROJECT_STATUS,'3',PROJECT_ID))"On Hold"
    , count (decode(PROJECT_STATUS,'4',PROJECT_ID))"Pipeline"
    , count (decode(PROJECT_STATUS,'5',PROJECT_ID))"Pending Review"
    from GRAPO_PROHEADTRK
    where (PROJECT_STATUS='1' or PROJECT_STATUS='2' or PROJECT_STATUS='3' or PROJECT_STATUS='4' or PROJECT_STATUS='5' or PROJECT_STATUS='6')
    group by CATEGORY
    Order by COUNT(PROJECT_ID) DESC
    The code from the other app was:
    select null link
    , FUNCTIONAL_AREA label
    , count (decode(PROJECT_STATUS,'Active',PROJECT_ID))"Active"
    , count (decode(PROJECT_STATUS,'Complete',PROJECT_ID))"Complete"
    , count (decode(PROJECT_STATUS,'On Hold',PROJECT_ID)) "On Hold"
    , count (decode(PROJECT_STATUS,'Recurring',PROJECT_ID))"Recurring"
    , count (decode(PROJECT_STATUS,'Pipeline',PROJECT_ID))"Pipeline"
    , count (decode(PROJECT_STATUS,'Not Approved',PROJECT_ID))"Not Approved"
    from PM_V2
    where LOB='S2S' and (FUNCTIONAL_AREA='Accounts Payable' or FUNCTIONAL_AREA='Expense' or FUNCTIONAL_AREA='Procurement' or FUNCTIONAL_AREA='Fixed Assets')
    group by FUNCTIONAL_AREA
    Order by COUNT(PROJECT_ID) DESC
    I'm getting a "Failed to parse SQL query!" error when I try to run validation.
    Is this enough info for some assistance? Any help would really be appreciated.
    Thanks,
    Rachel

    Hello,
    This is more of an SQL question, rather than specifically APEX-related. It's notable that you say: I'm a new user on APEX with no real SQL knowledgeWhich is fine (we all have to start somewhere, afterall) but it might be worth de-coupling the problem from APEX in the first instance. I'd also strongly recommend either taking a course, reading a book (e.g. http://books.google.co.uk/books?id=r5vbGgz7TFsC&printsec=frontcover&dq=Mastering+Oracle+SQL&hl=en#v=onepage&q=Mastering%20Oracle%20SQL&f=false) or looking for a basic SQL tutorial - it will save you a whole lot of heartache, I promise you. Search the oracle forums for the terms "Basic SQL Tutorial" and you should come up with a bunch of results.
    Given that you've copied your query template from another, I would suggest ensuring that the actual query works first of all. Try running it in either:
    * SQL Editor
    * SQL*Plus
    * an IDE like SQL Developer (available free from the OTN: http://www.oracle.com/technetwork/developer-tools/sql-developer/downloads/index.html ) or TOAD or similar.
    You may find there are syntax errors associated with the query - it's difficult to tell without looking at your data model.
    select null link
    , CATEGORY label
    , count (decode(PROJECT_STATUS,'1',PROJECT_ID))"Active"
    , count (decode(PROJECT_STATUS,'2',PROJECT_ID))"Complete"
    , count (decode(PROJECT_STATUS,'3',PROJECT_ID))"On Hold"
    , count (decode(PROJECT_STATUS,'4',PROJECT_ID))"Pipeline"
    , count (decode(PROJECT_STATUS,'5',PROJECT_ID))"Pending Review"
    from GRAPO_PROHEADTRK
    where (PROJECT_STATUS='1' or PROJECT_STATUS='2' or PROJECT_STATUS='3' or PROJECT_STATUS='4' or PROJECT_STATUS='5' or PROJECT_STATUS='6')
    group by CATEGORYNote that your "order by" clause references a field called "PROJECT_ID", which exists in the old query but you've changed other similar references to "PROJECT_STATUS" - is it possible you've just missed this one? The perils of copy-paste coding I'm afraid...

  • Need help on oracle sql query

    Hi team,
    Please help me on below query,
    I have table like given below
    Tran_Id  tran_date   amount. Actorid
       1.         10-apr-15.   100.         1
       2.         11-apr-15.   100.         1
       3.         11-apr-15.   900.         1
       4.         12-apr-15.   100.         1
       5.         13-apr-15.   350.         1
       6.         14-apr-15.   400.         1
    Now please find the query,
    I want all the actor ids whos tran amount
    >1500 and the  date when the tran amount
    Has breached
    Ex:
    Actor-id.  Breached-date.    Total
      1.              13-apr-15.            1900
    How can I write a query for above requirement?
    Regards,
    Rajendra

    Your solution (same as Saubhik's) is incorrect. Look at source data - multiple transactions can occur same day. Therefore, your qury will return wrong results if breached amount is 1000:
    with trans as (
    select  1  tran_Id, to_date('10-apr-15', 'dd-mon-yy') tran_date,  100 amount, 1 actorid from dual union all
    select  2,  to_date('11-apr-15', 'dd-mon-yy'), 100, 1 from dual union all
    select  3,  to_date('11-apr-15', 'dd-mon-yy'), 900, 1 from dual union all
    select  4,  to_date('12-apr-15', 'dd-mon-yy'), 100, 1 from dual union all
    select  5,  to_date('13-apr-15', 'dd-mon-yy'), 350, 1 from dual union all
    select  6,  to_date('14-apr-15', 'dd-mon-yy'), 400, 1 from dual union all
    select  7,  to_date('12-apr-15', 'dd-mon-yy'), 300, 2 from dual union all
    select  8,  to_date('13-apr-15', 'dd-mon-yy'), 1200, 2 from dual union all
    select  9,  to_date('14-apr-15', 'dd-mon-yy'), 300, 2 from dual union all
    select  10,  to_date('15-apr-15', 'dd-mon-yy'), 300, 2 from dual
    trans_running_tot as (
    select tran_id, tran_date,
      sum(amount) over (partition by actorid order by tran_date) tot_amt, actorid
    from trans
    trans_ranked as (
    select actorid,tran_id, tran_date,
      rank() over (partition by actorid order by tot_amt) rk
    from trans_running_tot
    where tot_amt > 1000
    select * from trans_ranked where rk=1
       ACTORID    TRAN_ID TRAN_DATE         RK
             1          2 11-APR-15          1 -- here total amount was only 200
             1          3 11-APR-15          1
             2          8 13-APR-15          1
    SQL>
    As you can see, 2 rows were returned for actor 1. Why? Default for analytic ORDER BY is RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW. Therefore, all rows with same transation_date will fall into same window:
    SQL>  with trans as (
      2   select  1  tran_Id, to_date('10-apr-15', 'dd-mon-yy') tran_date,  100 amount, 1 actorid from dual union all
      3   select  2,  to_date('11-apr-15', 'dd-mon-yy'), 100, 1 from dual union all
      4   select  3,  to_date('11-apr-15', 'dd-mon-yy'), 900, 1 from dual union all
      5   select  4,  to_date('12-apr-15', 'dd-mon-yy'), 100, 1 from dual union all
      6   select  5,  to_date('13-apr-15', 'dd-mon-yy'), 350, 1 from dual union all
      7   select  6,  to_date('14-apr-15', 'dd-mon-yy'), 400, 1 from dual union all
      8   select  7,  to_date('12-apr-15', 'dd-mon-yy'), 300, 2 from dual union all
      9   select  8,  to_date('13-apr-15', 'dd-mon-yy'), 1200, 2 from dual union all
    10   select  9,  to_date('14-apr-15', 'dd-mon-yy'), 300, 2 from dual union all
    11   select  10,  to_date('15-apr-15', 'dd-mon-yy'), 300, 2 from dual
    12   )
    13  select tran_id, tran_date,
    14    sum(amount) over (partition by actorid order by tran_date) tot_amt, actorid
    15  from trans
    16  /
       TRAN_ID TRAN_DATE    TOT_AMT    ACTORID
             1 10-APR-15        100          1
             2 11-APR-15       1100          1
             3 11-APR-15       1100          1
             4 12-APR-15       1200          1
             5 13-APR-15       1550          1
             6 14-APR-15       1950          1
             7 12-APR-15        300          2
             8 13-APR-15       1500          2
             9 14-APR-15       1800          2
            10 15-APR-15       2100          2
    10 rows selected.
    SQL>
    So correct solution is to ORDER BY transation id. Also, just in case if amount can be 0, we should add tranaction id when ordering by sum:
    with trans as (
    select  1  tran_Id, to_date('10-apr-15', 'dd-mon-yy') tran_date,  100 amount, 1 actorid from dual union all
    select  2,  to_date('11-apr-15', 'dd-mon-yy'), 100, 1 from dual union all
    select  3,  to_date('11-apr-15', 'dd-mon-yy'), 900, 1 from dual union all
    select  4,  to_date('12-apr-15', 'dd-mon-yy'), 100, 1 from dual union all
    select  5,  to_date('13-apr-15', 'dd-mon-yy'), 350, 1 from dual union all
    select  6,  to_date('14-apr-15', 'dd-mon-yy'), 400, 1 from dual union all
    select  7,  to_date('12-apr-15', 'dd-mon-yy'), 300, 2 from dual union all
    select  8,  to_date('13-apr-15', 'dd-mon-yy'), 1200, 2 from dual union all
    select  9,  to_date('14-apr-15', 'dd-mon-yy'), 300, 2 from dual union all
    select  10,  to_date('15-apr-15', 'dd-mon-yy'), 300, 2 from dual
    trans_running_tot as (
    select tran_id, tran_date,
      sum(amount) over (partition by actorid order by tran_id) tot_amt, actorid
    from trans
    trans_ranked as (
    select actorid,tran_id, tran_date,
      rank() over (partition by actorid order by tot_amt,tran_id) rk
    from trans_running_tot
    where tot_amt > 1000
    select * from trans_ranked where rk=1
       ACTORID    TRAN_ID TRAN_DATE         RK
             1          3 11-APR-15          1
             2          8 13-APR-15          1
    SQL>
    SY.

  • Need help on a sql query

    Hi Friends,
    I am trying to load Employees and their Assignments using APIs.
    I have various columns in my staging table like Last Name, First Name, etc., but I need help in writing query in the cursor especially for columns Emp Number and Supervisor Number.
    I have data as below
    Emp_Number     Supervisor_Number
    GE0002               GE0064
    GE0064               EG0009
    EG0009               EG0001
    100009                EG0001
    EG0001               TU0001
    Cursor I write will process the data in the same order as above, but here the problem is...
    When it processes first row, it checks for supervisor GE0064 which do not exist and so it errors out.
    Similarly for second row, it checks for supervisor EG0009 which again do not exist and so it errors out.
    So in order to prevent this, the cursor should process the rows as below
    Emp_Number     Supervisor_Number
    EG0001               TU0001
    EG0009               EG0001
    GE0064               EG0009
    GE0002               GE0064
    100009                EG0001
    By this way, Supervisor should be defined first as an employee and then it can be used as a supervisor for other employees
    is there a way that I can get the output as above(second set of data), when the table has records randomly as above(first set of data)
    Appreciate your help!
    Thanks,
    Srikanth

    Srikanth wrote:
    ... but the number of records returned by above query are lot more than number of records in the table.
    Why did the number go up?
    It's something only you can find out
    Maybe some Emp have several Supervisor(s) like
    with
    t as
    (select 'GE0002' Emp,'GE0064' Supervisor from dual union all
    select 'GE0064','EG0009' from dual union all
    select 'EG0009','EG0001' from dual union all
    select 'GE0064','100009' from dual union all
    select '100009','EG0001' from dual union all
    select 'EG0001','TU0001' from dual
    select Emp,Supervisor,lpad('_',3 * (level - 1),'_')||Emp indent
      from (select Emp,Supervisor
              from t
            union all
            select supervisor,null
              from t tt
             where not exists(select null
                                from t
                               where emp = tt.supervisor
    start with Supervisor is null
    connect by prior Emp = Supervisor
    EMP
    SUPERVISOR
    INDENT
    TU0001
    TU0001
    EG0001
    TU0001
    ___EG0001
    100009
    EG0001
    ______100009
    GE0064
    100009
    _________GE0064
    GE0002
    GE0064
    ____________GE0002
    EG0009
    EG0001
    ______EG0009
    GE0064
    EG0009
    _________GE0064
    GE0002
    GE0064
    ____________GE0002
    Regards
    Etbin

  • Need Help in Building a Query

    Hi,
    I have a requirment where the table data looks like as below:
    COL_NAME      COL_NAME1
    RAW_SDP     FCT_SDP
    FILENAME     FILENAME
    SDPID     SDPID
    CDRID     CDRID
    ORIGINALCDRNODEID     ORIGINALCDRNODEID
    ORIGINALCDRID     ORIGINALCDRID
    SUBSCRIBERNUMBER     SUBSCRIBERNUMBER
    COL_NAME and COL_NAME1 are the 2 columns in the table
    RAW_SDP and FCT_SDP data is stored asTable Names.
    I want a scenario where i want to pick the data(shown below) as condition as COL_NAME='RAW_SDP'
    FILENAME
    SDPID
    CDRID
    ORIGINALCDRNODEID
    ORIGINALCDRID
    SUBSCRIBERNUMBER
    Any help will be benefitial
    Thanks and Regards

    Ok, first you need to be clear what you are referring to...
    By "excel file" are you referring to a CSV file (i.e. a flat file you can load in notepad and look at the data) or are you referring to a ".xls" file that is a MS Excel workbook?
    If it's a CSV/flat file then you should use external tables to read the data...
    http://www.psoug.org/reference/externaltab.html
    If it's a .xls workbook file then you will need to set up an ODBC connection and create it as an external database...
    e.g.
    1- Go to Control Panel>Administrative Tools>Data Sources (ODBC)>System DSN and create a data source with appropriate driver. Name it EXCL.
    2- In %ORACLE_HOME%\Network\Admin\Tnsnames.ora fie add entry:
    EXCL =
    (DESCRIPTION =
    (ADDRESS_LIST =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 10.12.0.24)(PORT = 1521))
    (CONNECT_DATA =
    (SID = EXCL)
    (HS = OK)
    Here SID is the name of data source that you have just created.
    3- In %ORACLE_HOME%\Network\Admin\Listener.ora file add:
    (SID_DESC =
    (PROGRAM = hsodbc)
    (SID_NAME = <hs_sid>)
    (ORACLE_HOME = <oracle home>)
    under SID_LIST_LISTENER like:
    SID_LIST_LISTENER =
    (SID_LIST =
    (SID_DESC =
    (SID_NAME = PLSExtProc)
    (ORACLE_HOME = d:\ORA9DB)
    (PROGRAM = extproc)
    (SID_DESC =
    (GLOBAL_DBNAME = ORA9DB)
    (ORACLE_HOME = d:\ORA9DB)
    (SID_NAME = ORA9DB)
    (SID_DESC =
    (PROGRAM = hsodbc)
    (SID_NAME = EXCL)
    (ORACLE_HOME = D:\ora9db)
    Dont forget to reload the listener
    c:\> lsnrctl reload
    4- In %ORACLE_HOME%\hs\admin create init<HS_SID>.ora. For our sid EXCL we create file initexcl.ora.
    In this file set following two parameters:
    HS_FDS_CONNECT_INFO = excl
    HS_FDS_TRACE_LEVEL = 0
    5- Now connect to Oracle database and create database link with following command:
    SQL> CREATE DATABASE LINK excl
    2 USING 'excl'
    3 /
    Database link created.
    Now you can perform query against this database like you would for any remote database.
    SQL> SELECT table_name FROM all_tables@excl;
    TABLE_NAME
    DEPT
    EMP

  • Need help on small sql query

    Hi,
    I have a requirement where I need to show 'F&D' string. I can explain this by below query.
    select 'F&D' from dual
    but when I run this query, toad prompts me to enter value for &D variable :( But my requirement is to show 'F&D' string.
    Can anyone please tell me what modification needs to be done to above query to get string 'F&D' as output.
    I know work around for this as below.
    select 'F'||chr(38)||'D' from dual
    I want permenant solution for this. Can anyone please help me?
    Thanks
    Shantanu

    see if below make difference
    SQL> select 'F&D' from dual ;
    Enter value for d: &D
    old   1: select 'F&D' from dual
    new   1: select 'F&D' from dual
    'F&
    F&D
    SQL> select 'F'||'&'||'D' from dual ;
    'F'
    F&D

  • Need help in the sql query

    i have a table
    source table :
    create table order(name_a varchar2(100),intid number);
    insert into order values('a',1);
    insert into order values('b',1);
    insert into order values('c',1);
    insert into order values('d',1);
    insert into order values('e',2);
    insert into order values('f',2);
    insert into order values('g',2);
    i need a query , which result in the below output :
    if i look for intid=1 the query should give a,b,c,d
    if i look for intid=2 the query should give f,g
    Thanks

    Hi,
    781649 wrote:
    i have a table
    source table :
    create table order(name_a varchar2(100),intid number);
    insert into order values('a',1);
    insert into order values('b',1);
    insert into order values('c',1);
    insert into order values('d',1);
    insert into order values('e',2);
    insert into order values('f',2);
    insert into order values('g',2);Thanks for posting the CREATE TABLE and INSERT statements; it's very helpful.
    i need a query , which result in the below output :
    if i look for intid=1 the query should give a,b,c,d
    if i look for intid=2 the query should give f,gDid you mean <b>e</b>,f,g ?
    That's called String Aggregation , and how to do it depends on your version of Oracle, and your exact requirements.
    See thie following page for several techniques:
    http://www.oracle-base.com/articles/10g/StringAggregationTechniques.php
    If you're using Oracle 10 (or higher), and it's important that the name_a's be in order in the output, then you can do this:
    WITH     got_r_num     AS
         SELECT     name_a
         ,     intid
         ,     ROW_NUMBER () OVER ( PARTITION BY  intid
                                   ORDER BY          name_a
                           )         AS r_num
         FROM     order_table                    -- ORDER is not a good table name
         WHERE     intid     IN (1)                    -- Optional
    SELECT     intid
    ,     SUBSTR ( SYS_CONNECT_BY_PATH (name_a, ',')
                , 2
                )     AS name_a_list
    FROM     got_r_num
    WHERE     CONNECT_BY_ISLEAF     = 1
    START WITH     r_num     = 1
    CONNECT BY     r_num     = PRIOR r_num + 1
         AND     intid     = PRIOR intid
    ;Starting in Oracle 11.2, LISTAGG is better.
    This does not assume that you are getting the output only for a single intid at a time. You can get any number of them in a suingle query. Of course, that number can be 1 if that's what you want.
    Edited by: Frank Kulash on Mar 24, 2011 12:19 PM

  • Need Help with Advanced SQL Query

    It's advanced for me, at least. I have three tables that I
    need to use:
    Product (product_id and product_title are the fields)
    shipRegion (shipRegion_ID)
    product_shipRegion_shipCharge (product_id, shipRegion_ID,
    primaryShipCharge, secondaryShipCharge)
    What I am trying to do is create a query that will look for
    two things:
    1. Any product that is listed in the
    product_shipRegion_shipCharge table that has a primary or secondary
    ship charge of $0.00 or is NULL.
    That part is easy:
    SELECT DISTINCT p.product_id, p.product_title
    FROM product p
    INNER JOIN product_shipRegion_shipCharge pss ON p.product_id
    = pss.product_id AND (pss.primaryShipCharge IS NULL OR
    pss.primaryShipCharge = 0 OR pss.secondaryShipCharge IS NULL OR
    pss.secondaryShipCharge = 0)
    WHERE p.display = 1
    AND p.price > 0
    It's this next part that's tricky for me:
    2. Get the product_id and product_title (from the product
    table) that does NOT have any entry in the
    product_shipRegion_shipCharge table.
    I'm guessing that I need to include some kind of LEFT JOIN in
    the above query to find out what all of the regions are (from the
    shipRegion table) and then see what's missing for each product in
    the product_shipRegion_shipCharge table, but I have no idea how to
    do it.
    Anyone?
    Josh

    This should be what the query would look like using the left
    join:
    SELECT product_table.product_id, product_table.product_title
    FROM product_table
    LEFT OUTER JOIN product_shipRegion_shipCharge
    ON product_shipRegion_shipCharge.product_id =
    product_table.product_id
    WHERE product_shipRegion_shipCharge. product_id IS NULL
    SQL Server's query optimizer will probably turn the '...IN
    (subquery)' or '...exists (subquery)' into this kind of execution
    plan on its own - depending on your table structures.

  • Need help creating large SQL query

    I am trying collect the sum of records that have a cancelled event prior to the Arrive event. The solution needs to be within the Sum function. Any ideas would be helpful
    The structure of the table is as follows
    1. Record_Num(primary): varchar
    2. Event_Type: varchar
    3. Time: timestamp
    Each record number can contain multiple events, hence the issue with specifiying the time for an event of 'Arrive' and an event of 'Canceled'
    This is part of a much bigger query, here's what that looks like:
    Select
    Sum(Case when di.calltype = 'Missed' then 1 else null end) as "Canceled Prior To Liftoff",
    Sum(Case
    when dt.eventtype = 'Canceled' Then 1
    when
    (select to_char(dt.datetimestamp, 'HH:MI:SS')
    from progpennstar.dispatchtime dt
    where Lower(dt.eventtype) in 'aborted')
    < any (select to_char(dt.datetimestamp, 'HH:MI:SS')
    from progpennstar.dispatchtime dt
    where dt.eventtype in 'Arrive Locale')
    Then 1
    Else null end) as "Canceled Enroute to Call"
    From progpennstar.dispatch di, progpennstar.dispatchtime dt
    where di.dateoftransport >= to_date('07/01/2008', 'MM/DD/YYYY') and
    di.dateoftransport <= to_date('09/30/2008', 'MM/DD/YYYY') and
    di.dispatch_id = dt.dispatch_id

    to the op: I think SomeoneElse already got the solution, I just want to add a few minor points. You can replace the ANY construct (which is rarely used) with a simple comparison. In general ANY constructs are more difficult to understand. Check if the correct logic is applied.
    SELECT SUM(CASE
                   WHEN di.calltype = 'Missed' THEN 1
                   ELSE NULL
               END) AS "Canceled Prior To Liftoff"
          ,SUM(CASE
                   WHEN dt.eventtype = 'Canceled' THEN 1
                   WHEN dt.eventtype = 'Aborted'
                   AND  exists (SELECT null
                                        FROM dispatchtime dt2
                                        WHERE dt2.eventtype IN 'Arrive Locale'
                                        AND dt2.dispatch_id = di.dispatch_id
                                        AND dt.datetimestamp < dt2.datetimestamp /* this is the new comparison */
                         THEN   1
                   ELSE  NULL
               END) AS "Canceled Enroute to Call"
    FROM   dispatch di,
           dispatchtime dt
    WHERE  di.dateoftransport >= to_date('07/01/2008', 'MM/DD/YYYY')
    AND    di.dateoftransport < to_date('09/30/2008', 'MM/DD/YYYY') /* Carefull! I changed <= to <. Do you want to include the full last day or only midnight?  */
    AND    di.dispatch_id = dt.dispatch_id;I also changed the alias of the remaining subquery so that different aliases are used.
    Edited by: Sven W. on Dec 11, 2008 1:01 PM

  • Need helping making a SQL query faster

    Below is my query, it takes about 75 seconds to run right now. The outer joins are for cases that do not have records in that table. I am almost completely self taught, so I have some gaps in my knowledge of SQL.
    Thanks in advance for your help.
    SELECT DISTINCT B1.B1_ALT_ID CASENUMBER,
                    B1.B1_PER_GROUP
                    ||'/'
                    ||B1.B1_PER_TYPE
                    ||'/'
                    ||B1.B1_PER_SUB_TYPE
                    ||'/'
                    ||B1.B1_PER_CATEGORY APPTYPE,               
                    BPD.B1_COMPLETE_BY RECBY,
                    BPD.HOUSE_COUNT HOUSECOUNT,
                    BPD.REC_DATE,
                    CASE
                      WHEN B3C.B1_BUS_NAME IS NOT NULL
                           AND B3C.B1_PRINT_FLAG = 'Y' THEN B3C.B1_BUS_NAME
                      ELSE B3O.B1_OWNER_FULL_NAME
                    END CONTRACTOR,
                    B3O.B1_OWNER_FULL_NAME OWNERNAME,
                    B3O.B1_MAIL_ADDRESS1,
                    B3O.B1_MAIL_ADDRESS2,
                    B3O.B1_MAIL_ADDRESS3,
                    B3O.B1_MAIL_CITY,
                    B3O.B1_MAIL_STATE,
                    B3O.B1_MAIL_ZIP,
                    FN_GET_PRI_ADDRESS_PARTIAL('RENO',B1.B1_PER_ID1,B1.B1_PER_ID2,B1.B1_PER_ID3) JOBSITE,
                    B3P.B1_PARCEL_NBR PARCELNUMBER,
                    B3P.B1_LOT LOT,
                    BV.G3_VALUE_TTL JOBVALUE,
                    BW.B1_WORK_DESC WORKDESC,
                    CASE
                      WHEN B3CON.B1_BUSINESS_NAME IS NOT NULL
                           AND B3CON.B1_CONTACT_TYPE = 'Occupant/Tenant' THEN B3CON.B1_BUSINESS_NAME
                      WHEN B3CON.B1_BUSINESS_NAME IS NULL
                           AND B3CON.B1_CONTACT_TYPE = 'Occupant/Tenant' THEN B3CON.B1_FNAME
                                                                              ||' '
                                                                              ||B3CON.B1_LNAME
                      ELSE ''
                    END TENANT,
                    (SELECT DISTINCT BAV.ATTRIBUTE_VALUE
                     FROM   BAPPSPECTABLE_VALUE BAV
                     WHERE  B1.B1_PER_ID1 = BAV.B1_PER_ID1
                            AND B1.B1_PER_ID2 = BAV.B1_PER_ID2
                            AND B1.B1_PER_ID3 = BAV.B1_PER_ID3
                            AND BAV.COLUMN_NAME = 'Type of Construction') TOC,
                    (SELECT DISTINCT BAV.ATTRIBUTE_VALUE
                     FROM   BAPPSPECTABLE_VALUE BAV
                     WHERE  B1.B1_PER_ID1 = BAV.B1_PER_ID1
                            AND B1.B1_PER_ID2 = BAV.B1_PER_ID2
                            AND B1.B1_PER_ID3 = BAV.B1_PER_ID3
                            AND BAV.COLUMN_NAME = 'Occupancy Group') OCCGROUP,
                    (SELECT DISTINCT BAV.ATTRIBUTE_VALUE
                     FROM   BAPPSPECTABLE_VALUE BAV
                     WHERE  B1.B1_PER_ID1 = BAV.B1_PER_ID1
                            AND B1.B1_PER_ID2 = BAV.B1_PER_ID2
                            AND B1.B1_PER_ID3 = BAV.B1_PER_ID3
                            AND BAV.COLUMN_NAME = 'Occupancy Use') OCCUSE,
                    (SELECT DISTINCT BC.B1_CHECKLIST_COMMENT
                     FROM   BCHCKBOX BC
                     WHERE  B1.B1_PER_ID1 = BC.B1_PER_ID1
                            AND B1.B1_PER_ID2 = BC.B1_PER_ID2
                            AND B1.B1_PER_ID3 = BC.B1_PER_ID3
                            AND BC.B1_CHECKLIST_COMMENT IS NOT NULL
                            AND BC.B1_CHECKBOX_DESC = 'Fire Alarm System') FIREALARM,
                    (SELECT DISTINCT BC.B1_CHECKLIST_COMMENT
                     FROM   BCHCKBOX BC
                     WHERE  B1.B1_PER_ID1 = BC.B1_PER_ID1
                            AND B1.B1_PER_ID2 = BC.B1_PER_ID2
                            AND B1.B1_PER_ID3 = BC.B1_PER_ID3
                            AND BC.B1_CHECKLIST_COMMENT IS NOT NULL
                            AND BC.B1_CHECKBOX_DESC = 'Fire Sprinkler System') FIRESPRINKLER
    FROM   B1PERMIT B1
           INNER JOIN BPERMIT_DETAIL BPD
             ON B1.B1_PER_ID1 = BPD.B1_PER_ID1
                AND B1.B1_PER_ID2 = BPD.B1_PER_ID2
                AND B1.B1_PER_ID3 = BPD.B1_PER_ID3
           LEFT OUTER JOIN B3CONTRA B3C
             ON B1.B1_PER_ID1 = B3C.B1_PER_ID1
                AND B1.B1_PER_ID2 = B3C.B1_PER_ID2
                AND B1.B1_PER_ID3 = B3C.B1_PER_ID3
                AND B3C.B1_PRINT_FLAG = 'Y'
           LEFT OUTER JOIN B3OWNERS B3O
             ON B1.B1_PER_ID1 = B3O.B1_PER_ID1
                AND B1.B1_PER_ID2 = B3O.B1_PER_ID2
                AND B1.B1_PER_ID3 = B3O.B1_PER_ID3
                and b3o.b1_primary_owner = 'Y'
           LEFT OUTER JOIN B3PARCEL B3P
             ON B1.B1_PER_ID1 = B3P.B1_PER_ID1
                AND B1.B1_PER_ID2 = B3P.B1_PER_ID2
                AND B1.B1_PER_ID3 = B3P.B1_PER_ID3
           INNER JOIN BVALUATN BV
             ON B1.B1_PER_ID1 = BV.B1_PER_ID1
                AND B1.B1_PER_ID2 = BV.B1_PER_ID2
                AND B1.B1_PER_ID3 = BV.B1_PER_ID3
           INNER JOIN BWORKDES BW
             ON B1.B1_PER_ID1 = BW.B1_PER_ID1
                AND B1.B1_PER_ID2 = BW.B1_PER_ID2
                AND B1.B1_PER_ID3 = BW.B1_PER_ID3
           LEFT OUTER JOIN B3CONTACT B3CON
             ON B1.B1_PER_ID1 = B3CON.B1_PER_ID1
                AND B1.B1_PER_ID2 = B3CON.B1_PER_ID2
                AND B1.B1_PER_ID3 = B3CON.B1_PER_ID3
                AND B3CON.B1_CONTACT_TYPE = 'Occupant/Tenant'
           LEFT OUTER JOIN BAPPSPECTABLE_VALUE BAV
             ON B1.B1_PER_ID1 = BAV.B1_PER_ID1
                AND B1.B1_PER_ID2 = BAV.B1_PER_ID2
                AND B1.B1_PER_ID3 = BAV.B1_PER_ID3
                AND BAV.COLUMN_NAME IN ('Type of Construction',
                                        'Occupancy Group',
                                        'Occupancy Use')
           LEFT OUTER JOIN BCHCKBOX BC
             ON B1.B1_PER_ID1 = BC.B1_PER_ID1
                AND B1.B1_PER_ID2 = BC.B1_PER_ID2
                AND B1.B1_PER_ID3 = BC.B1_PER_ID3
                AND BC.B1_CHECKBOX_DESC IN ('Fire Alarm System',
                                            'Fire Sprinkler System')
    WHERE  B1.B1_ALT_ID = UPPER('{?CaseNumber}')
    and rownum = 1

    Hi James
    Please provide me the following information.
    1)What is the version of crystal reports you are using?
    2)Whcih database & connection type are you using?
    3)Does this query take 75 mins to run in Crystal reports designer?
    4)How much time does it take at your database end?
    5)How many records are fetched by this query?
    6)Looking at the query it shows that it is using case statements and few joins for restricting the data.
    7)Please use the same query in a command object in Crystal reports designer and check the result.
    Thanks
    Pradeep Hulke

  • Need help in this sql query to use Case Statement

    hi All,
    I have the below query -
    SELECT DISTINCT OFFC.PROV_ID
    ,OFFC.WK_DAY
    ,CASE
    WHEN OFFC.WK_DAY ='MONDAY' THEN 1
    WHEN OFFC.WK_DAY ='TUESDAY' THEN 2
    WHEN OFFC.WK_DAY ='WEDNESDAY' THEN 3
    WHEN OFFC.WK_DAY ='THURSDAY' THEN 4
    WHEN OFFC.WK_DAY ='FRIDAY' THEN 5
    WHEN OFFC.WK_DAY ='SATURDAY' THEN 6
    WHEN OFFC.WK_DAY ='SUNDAY' THEN 7
    END AS DOW
    ,OFFC.OFFC_OPENG_TIME
    ,OFFC.OFFC_CLSNG_TIME
    FROM GGDD.PROV_OFFC_HR OFFC
    WHERE OFFC.PROV_ID='0000600'
    WITH UR;
    this query is bringing results in 6 differnt rows with opening and closing time for each day separately. I want to generate the data in one row with each day having opening and closing time, so for 7 days, total 14 columns with opening and closing time. But i am not able to do that using case statement.
    can somebody help me in achieving that.
    thanks,
    iamhere

    Hi,
    Welcome to the forum!
    That's called a Pivot .
    Instead of having 1CASE expression, have 14, one for the opening and one for the closing time each day, and do GROUP BY to combine them onto one row.
    SELECT       OFFC.PROV_ID
    ,       MIN (CASE WHEN OFFC.WK_DAY ='MONDAY'    THEN OFFC.OFFC_OPENG_TIME END)     AS mon_opn
    ,       MIN (CASE WHEN OFFC.WK_DAY ='MONDAY'    THEN OFFC.OFFC_CLSNG_TIME END)     AS mon_cls
    ,       MIN (CASE WHEN OFFC.WK_DAY ='TUESDAY'   THEN OFFC.OFFC_OPENG_TIME END)     AS tue_opn
    ,       MIN (CASE WHEN OFFC.WK_DAY ='TUESDAY'   THEN OFFC.OFFC_CLSNG_TIME END)     AS tue_cls
    FROM        GGDD.PROV_OFFC_HR OFFC
    WHERE       OFFC.PROV_ID     = '0000600'
    GROUP BY  offc.prov_id
    ;This assumes there is (at most) only one row in the table for each distinct prov_id and weekday. If not, what do you want to do? Post a little sample data (CREATE TABLE and INSERT statements) and the results you want from that data.
    The staement above works in Oracle 8.1 and up, but there's a better way (SELECT ... PIVOT) available in Oracle 11. What version are you using? (It's always a good idea to include this when you post a question.)
    Edited by: Frank Kulash on Jan 6, 2011 8:22 PM

  • Please need help on this SQL query ..

    hi peers,
    here is my situation :
    Field1 Field2 Field3
    xa group1 req_id1
    xb group2 req_id2
    xc group3 req_id3
    xa group4 req_id4
    xb group5 req_id5
    i need to pull only the group3 record that comes right away after group2. Req_id's are in chronological order and groupx are texts
    : i.e : req_id1 < req_id2 < req_id3 <.....
    in other terms, i need the record that comes after the re cord flagged by group2..knowing that req_id3 is right after req_id2.
    any thoughts ?
    thanks

    Hi,
    Use the analytic LAG function to get a value from an earlier row:
    WITH     got_prev_field2     AS
         SELECT     field1, field2, field3
         ,     LAG (field2) OVER (ORDER BY  field3)     AS prev_field2
         FROM     my_situation
    SELECT     field1, field2, field3
    FROM     got_prev_field2
    WHERE     prev_field2     = 'group2'
    ;Like all analytic functions, LAG is computed after the WHERE clause is applied. To use the value returned by LAG in a WHERE clause, we have to compute it in a sub-query.
    I hope this answers your question.
    If not, post a little sample data (CREATE TABLE and INSERT statements, relevant columns only), and also post the results you want from that data.

Maybe you are looking for