简体   繁体   中英

how to use union, group and order by in sql query

I have for Tables: List_of_payment, payment_tbl, foods_tbl, drinks_tbl

List_of_payment:

bill_id | year  | owner_ID 

101     | 2002  | 014

101     | 2002  | 014

101     | 2003  | 014

101     | 2003  | 014

101     | 2004  | 014

101     | 2005  | 014

payment_tbl:

bill_id | prod_foods_id | prod_drinks_id | prod_schooL_supply

101     |  123          |                |     

101     |               |     001        |    

101     |               |                |     234      

foods_tbl:

foods_id | name

123       | chocolate

021       | biscuit

312       | junk foods

drinks_tbl:

drinks_id | name

000       | coke

001       | juice

002       | milk

skol_supply_tbl:

supply_id | name

258       | pen

234       | pencil

987       | eraser

my question is how to use "UNION" in order to dispaly value of year and (either name of foods,drinks,skol supply) when I enter (either foods_id,drinks_id,supply_id)

below is my code:

value of "PK_ID" is either = 123,001,234 depends on the user

select payment_tbl.prod_foods_id,List_of_payment.year from payment_tbl 
join List_of_payment on payment_tbl.bill_id = List_of_payment.bill_id
where year in  (select year from List_of_payment where owner_id ='PK_ID') group by payment_tbl.prod_foods_id,List_of_payment.year order by List_of_payment.year 

Unioin

select payment_tbl.prod_drinks_id,List_of_payment.year from payment_tbl 
join List_of_payment on payment_tbl.bill_id = List_of_payment.bill_id
where year in  (select year from List_of_payment where owner_id ='PK_ID') group by payment_tbl.prod_drinks_id,List_of_payment.year order by List_of_payment.year 

UNion 

select payment_tbl.prod_schooL_supply,List_of_payment.year from payment_tbl 
join List_of_payment on payment_tbl.bill_id = List_of_payment.bill_id
where year in  (select year from List_of_payment where owner_id ='PK_ID') group by payment_tbl.prod_schooL_supply,List_of_payment.year order by List_of_payment.year 

igot an error when i execute my query "ERROR: syntax error at or near "union""

thanks in advance

Try like this:

SELECT  tbl.*
FROM    ( SELECT    payment_tbl.prod_foods_id,
                    List_of_payment.year
          FROM      payment_tbl
                    JOIN List_of_payment ON payment_tbl.bill_id = List_of_payment.bill_id
          WHERE     year IN ( SELECT    year
                              FROM      List_of_payment
                              WHERE     owner_id = 'PK_ID' )
          UNION
          SELECT    payment_tbl.prod_drinks_id,
                    List_of_payment.year
          FROM      payment_tbl
                    JOIN List_of_payment ON payment_tbl.bill_id = List_of_payment.bill_id
          WHERE     year IN ( SELECT    year
                              FROM      List_of_payment
                              WHERE     owner_id = 'PK_ID' )
          UNION
          SELECT    payment_tbl.prod_schooL_supply,
                    List_of_payment.year
          FROM      payment_tbl
                    JOIN List_of_payment ON payment_tbl.bill_id = List_of_payment.bill_id
          WHERE     year IN ( SELECT    year
                              FROM      List_of_payment
                              WHERE     owner_id = 'PK_ID' )
        ) tbl
GROUP BY payment_tbl.prod_drinks_id,
        List_of_payment.YEAR
ORDER BY List_of_payment.year

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM