1. Get rid of all advertisements and get unlimited access to documents by upgrading to Premium Membership. Upgrade to Premium Now and also get a Premium Badge!

Write a query for following output

Discussion in 'SQL PL/SQL' started by ashish kumar, Feb 13, 2014.

  1. ashish kumar

    ashish kumar Active Member

    Messages:
    11
    Likes Received:
    0
    Trophy Points:
    80
    I have a table XYz like this and contains so many records not just 4 records.

    Branch population
    delhi 1000
    noida 1500
    gurgaon 2000
    ghaziabad 3000
    -- ---
    -- ---

    I want following output like this by query.

    delhi noida gurgaon ghaziabad ----
    1000 1500 2000 3000
     
  2. jagadekara

    jagadekara Forum Guru

    Messages:
    1,126
    Likes Received:
    145
    Trophy Points:
    1,805
    Location:
    Pulivendula
    Hi,

    Why you need the output like that? Do you want it in report?
     
  3. krasnoslobodtsev_si

    krasnoslobodtsev_si Forum Genius

    Messages:
    626
    Likes Received:
    129
    Trophy Points:
    810
    Location:
    Russian Federation
  4. jagadekara

    jagadekara Forum Guru

    Messages:
    1,126
    Likes Received:
    145
    Trophy Points:
    1,805
    Location:
    Pulivendula
    Hi Sergey,

    Is this query related to Limits?, i didn't find answer for ashish questn...
     
  5. ashish kumar

    ashish kumar Active Member

    Messages:
    11
    Likes Received:
    0
    Trophy Points:
    80
    Hi,
    This query is not related to limit.
    I need query to this output and we can use Sql Plus or toad to execute a query.
    we need actual logic to write this query.
     
  6. jagadekara

    jagadekara Forum Guru

    Messages:
    1,126
    Likes Received:
    145
    Trophy Points:
    1,805
    Location:
    Pulivendula
    Hi,
    Here where is the column names?
     
  7. krasnoslobodtsev_si

    krasnoslobodtsev_si Forum Genius

    Messages:
    626
    Likes Received:
    129
    Trophy Points:
    810
    Location:
    Russian Federation
    In SQL you don't implement request without logical restrictions

    p.s. If the quantity of columns is in the report reasonably, then can use PIVOT
     
  8. krasnoslobodtsev_si

    krasnoslobodtsev_si Forum Genius

    Messages:
    626
    Likes Received:
    129
    Trophy Points:
    810
    Location:
    Russian Federation
    Tell, please,what it for the report in which the quantity of columns isn't restricted?
     
  9. jagadekara

    jagadekara Forum Guru

    Messages:
    1,126
    Likes Received:
    145
    Trophy Points:
    1,805
    Location:
    Pulivendula
    Hi ashish,

    I am able to display the output like below.

    Branch Population
    ------------------------------ ---------------------------
    delhi noida gurgaon ghaziabad ---- 1000 1500 2000 3000 ----
     
  10. krasnoslobodtsev_si

    krasnoslobodtsev_si Forum Genius

    Messages:
    626
    Likes Received:
    129
    Trophy Points:
    810
    Location:
    Russian Federation
    ashish , If only your output format is necessary to you, then it is possible to use the decision on pl/sql with use utl_file,dbms_lob ...
     
  11. ashish kumar

    ashish kumar Active Member

    Messages:
    11
    Likes Received:
    0
    Trophy Points:
    80
    Hi,
    Thanks all for your response.

    But i need same output.
    I mean population should come corresponding branch like this.

    Branch Populaton
    --------------------------------
    delhi noida gurgaon
    1000 1500 2000

    It depends no of value of branch column.
     
  12. jagadekara

    jagadekara Forum Guru

    Messages:
    1,126
    Likes Received:
    145
    Trophy Points:
    1,805
    Location:
    Pulivendula
    I think it's meaningless...

    Because you are displaying two column names but data is under which column name?

    Any how through report we can display it
     
  13. jagadekara

    jagadekara Forum Guru

    Messages:
    1,126
    Likes Received:
    145
    Trophy Points:
    1,805
    Location:
    Pulivendula
    Hi check this... It may help you.

    select rtrim (xmlagg (xmlelement (e, branch|| ',')).extract ('//text()'), ',') "Branch Populaton"
    from xyz
    union
    select rtrim (xmlagg (xmlelement (e, population|| ',')).extract ('//text()'), ',') "Branch Populaton"
    from xyz
    order by 1 desc;

    Please note that here i just used alias name as "Branch Populaton"
     
    ashish kumar likes this.
  14. krasnoslobodtsev_si

    krasnoslobodtsev_si Forum Genius

    Messages:
    626
    Likes Received:
    129
    Trophy Points:
    810
    Location:
    Russian Federation
    if version oracle >= 11, then may be to use function listagg

    Code (SQL):

     WITH xyz AS
           (
            SELECT 'delhi' branch, 1000 population  FROM dual UNION ALL
            SELECT 'noida'       , 1500             FROM dual UNION ALL
            SELECT 'gurgaon'    , 2000             FROM dual UNION ALL
            SELECT 'ghaziabad' ,3000        FROM dual
           )    
      SELECT  
            listagg(branch,',') WITHIN GROUP (ORDER BY 1)  "branch population"
      FROM xyz
      UNION ALL
     
      SELECT  
            listagg(population,',') WITHIN GROUP (ORDER BY 1)
      FROM  xyz ;


    SQL>

    branch poplation                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              
    ------------------------------------
    delhi,ghaziabad,gurgaon,noida                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
    1000,1500,2000,3000                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              

     
    additional link... can be will help
    http://www.oracle-base.com/articles/misc/string-aggregation-techniques.php
     
  15. zargon

    zargon Community Moderator Forum Guru

    Messages:
    2,351
    Likes Received:
    348
    Trophy Points:
    1,430
    Location:
    Aurora, CO
    You provide no real requirements for this 'order' for us to 'write a query for following output'. This is a help forum, not a short-order SQL query writing service. We will HELP you write such a query but you can't expect US to write it for you, that simply won't happen.


    Provide the actual requirements, create table statements and sample data; until we see that information it's pretty much impossible to assist you.
     
  16. DTSIGuy

    DTSIGuy Forum Advisor

    Messages:
    402
    Likes Received:
    58
    Trophy Points:
    410
    Location:
    Texas
    David is quite correct...however, as virtually everything is not working at my location except for SQL...I took it as an intellectual exercise.

    Use PL/SQL

    Since you want your data of cities to be columns, create a cursor for the cities.

    cursor city_csr is
    select distinct(cityname)
    from datatable;

    Then create a cursor for the numbers w/ the cityname as a parameter.

    cursor totals_csr(incity in varchar2) is
    select count(<whatever>) as Total
    from datatable
    where cityname = incity;

    Then all you do is loop through the first cursor...using dbms_output to get your 'columns'. After that do the same loop w/ an inner loop of the returned numbers...again, using DBMS_OUTPUT to get all the numbers displayed.

    You will end up having to do all kinds of string functions to get the spacing correct...but it's doable.

    Having said all that...the real question is whether or not you 'should' be doing this. Your requirement, such as it is at the posted moment, is sorely lacking in details. So be aware that while PL/SQL has its advantages for tackling rather odd SQL 'issues'...the use of PL/SQL has its own disadvantages as well, primarily w/ respect to performance should your data source be rather...large.

    HTH


    CJ
     
  17. zargon

    zargon Community Moderator Forum Guru

    Messages:
    2,351
    Likes Received:
    348
    Trophy Points:
    1,430
    Location:
    Aurora, CO
    I must also add that you failed to provide the Oracle version you are using; solutions to this 'problem' ARE version-dependent. The sample code provided earlier, using lisltagg(), is an 11.2 function and not available in prior releases. WM_CONCAT is available from 9i onwards but it is undocumented and could change behavior without notice in a subsequent release. PL/SQL will work across releases but it can be cumbersome to write and debug for this type of logic.


    Please post the release of Oracle you're using so we can better assist you.
     
  18. ashish kumar

    ashish kumar Active Member

    Messages:
    11
    Likes Received:
    0
    Trophy Points:
    80
    Hi all,
    I understand your point.
    I am using Oracle 10g Release 2.
    I need to do this by Sql query only .
    I don't have to use Pl/Sql .


    Thanks,
    Ashish
     
  19. jagadekara

    jagadekara Forum Guru

    Messages:
    1,126
    Likes Received:
    145
    Trophy Points:
    1,805
    Location:
    Pulivendula
    Hi ashish,

    Is my query doesn't meet your requirement?
     
  20. ashish kumar

    ashish kumar Active Member

    Messages:
    11
    Likes Received:
    0
    Trophy Points:
    80
    Yes
    This is fine.