简体   繁体   中英

Oracle SQL how to get the group by columns along with other selected columns

I have the below query :

SELECT COUNT(CASE WHEN T.TENANCY_STATUS = 'ACTIVE' THEN 1 END) TotalCount,
       COUNT(CASE WHEN T.UNIT_TYPE_DESCR_E  = 'APARTMENT' THEN 1 END) ApartmentCountTotal,
       COUNT(CASE WHEN T.UNIT_TYPE_DESCR_E  = 'VILLA' THEN 1 END) VillaCountTotal,
       COUNT(CASE WHEN T.UNIT_TYPE_DESCR_E  = 'STUDIO' THEN 1 END) StudioCountTotal,
       COUNT(CASE WHEN T.UNIT_TYPE_DESCR_E  = 'DUPLEX' THEN 1 END) DuplexCountTotal,
       COUNT(CASE WHEN T.UNIT_TYPE_DESCR_E  = 'APARTMENT' AND T.TENANCY_STATUS = 'ACTIVE' THEN 1 END) ApartmentCountActiveTotal,
       COUNT(CASE WHEN T.UNIT_TYPE_DESCR_E  = 'VILLA' AND T.TENANCY_STATUS = 'ACTIVE' THEN 1 END) VillaCountActiveTotal,
       COUNT(CASE WHEN T.UNIT_TYPE_DESCR_E  = 'STUDIO' AND T.TENANCY_STATUS = 'ACTIVE' THEN 1 END) StudioCountActiveTotal,
       COUNT(CASE WHEN T.UNIT_TYPE_DESCR_E  = 'DUPLEX' AND T.TENANCY_STATUS = 'ACTIVE' THEN 1 END) DuplexCountActiveTotal
FROM CMT WHERE COND1 = COND1 AND COND2=COND2

Now , along with the above select values in the query I wanted the below results to also come

(SELECT ROUND (SUM(RENTAL_VALUE_PER_UNIT)*0.05) ApartmentMuncipalFee FROM CMT T WHERE COND1 = COND1 
       AND T.unit_usage_type_descr_e = 'RESIDENTIAL' 
       AND T.UNIT_TYPE_DESCR_E  = 'APARTMENT'
       GROUP BY T.UNIT_TYPE_DESCR_E)

       (SELECT ROUND (SUM(RENTAL_VALUE_PER_UNIT)*0.05) VillaMuncipalFee FROM CMT T WHERE COND1 = COND1 
       AND T.unit_usage_type_descr_e = 'RESIDENTIAL' 
       AND T.UNIT_TYPE_DESCR_E  = 'VILLA'
       GROUP BY T.UNIT_TYPE_DESCR_E) VillaMuncipalFee

Kindly need help

Add them into SELECT statement :

SELECT . . . ,
       SUM(CASE WHEN T.unit_usage_type_descr_e = 'RESIDENTIAL' AND T.UNIT_TYPE_DESCR_E  = 'APARTMENT' THEN RENTAL_VALUE_PER_UNIT * 0.05 ELSE 0 END) AS ApartmentMuncipalFee, 
       SUM(CASE WHEN T.unit_usage_type_descr_e = 'RESIDENTIAL' AND T.UNIT_TYPE_DESCR_E  = 'VILLA' THEN RENTAL_VALUE_PER_UNIT * 0.05 ELSE 0 END) AS VillaMuncipalFee
FROM CMT 

You can use the aggregate function, add an extra condition in the count and remove the condition from the WHERE clause as follows:

SELECT
    COUNT(CASE WHEN COND2 = COND2 AND T.TENANCY_STATUS = 'ACTIVE' THEN 1 END) TotalCount,
    COUNT(CASE WHEN COND2 = COND2 AND T.UNIT_TYPE_DESCR_E  = 'APARTMENT' THEN 1 END) ApartmentCountTotal,
    COUNT(CASE WHEN COND2 = COND2 AND T.UNIT_TYPE_DESCR_E  = 'VILLA' THEN 1 END) VillaCountTotal,
    COUNT(CASE WHEN COND2 = COND2 AND T.UNIT_TYPE_DESCR_E  = 'STUDIO' THEN 1 END) StudioCountTotal,
    COUNT(CASE WHEN COND2 = COND2 AND T.UNIT_TYPE_DESCR_E  = 'DUPLEX' THEN 1 END) DuplexCountTotal,
    COUNT(CASE WHEN COND2 = COND2 AND T.UNIT_TYPE_DESCR_E  = 'APARTMENT' AND T.TENANCY_STATUS = 'ACTIVE' THEN 1 END) ApartmentCountActiveTotal,
    COUNT(CASE WHEN COND2 = COND2 AND T.UNIT_TYPE_DESCR_E  = 'VILLA' AND T.TENANCY_STATUS = 'ACTIVE' THEN 1 END) VillaCountActiveTotal,
    COUNT(CASE WHEN COND2 = COND2 AND T.UNIT_TYPE_DESCR_E  = 'STUDIO' AND T.TENANCY_STATUS = 'ACTIVE' THEN 1 END) StudioCountActiveTotal,
    COUNT(CASE WHEN COND2 = COND2 AND T.UNIT_TYPE_DESCR_E  = 'DUPLEX' AND T.TENANCY_STATUS = 'ACTIVE' THEN 1 END) DuplexCountActiveTotal,
    ROUND(SUM(CASE WHEN UNIT_USAGE_TYPE_DESCR_E = 'RESIDENTIAL' AND UNIT_TYPE_DESCR_E = 'APARTMENT' THEN RENTAL_VALUE_PER_UNIT END) * 0.05) AS APARTMENTMUNCIPALFEE,
    ROUND(SUM(CASE WHEN UNIT_USAGE_TYPE_DESCR_E = 'RESIDENTIAL' AND UNIT_TYPE_DESCR_E = 'VILLA' THEN RENTAL_VALUE_PER_UNIT END) * 0.05) AS VILLAMUNCIPALFEE
FROM CMT
WHERE COND1 = COND1; -- removed COND2 = COND2 and added in the all count

Cheers!!

You can use WITH clause to create temp tables.


WITH TAB1 AS (
SELECT COUNT(CASE WHEN T.TENANCY_STATUS = 'ACTIVE' THEN 1 END) TotalCount,
       COUNT(CASE WHEN T.UNIT_TYPE_DESCR_E  = 'APARTMENT' THEN 1 END) ApartmentCountTotal,
       COUNT(CASE WHEN T.UNIT_TYPE_DESCR_E  = 'VILLA' THEN 1 END) VillaCountTotal,
       COUNT(CASE WHEN T.UNIT_TYPE_DESCR_E  = 'STUDIO' THEN 1 END) StudioCountTotal,
       COUNT(CASE WHEN T.UNIT_TYPE_DESCR_E  = 'DUPLEX' THEN 1 END) DuplexCountTotal,
       COUNT(CASE WHEN T.UNIT_TYPE_DESCR_E  = 'APARTMENT' AND T.TENANCY_STATUS = 'ACTIVE' THEN 1 END) ApartmentCountActiveTotal,
       COUNT(CASE WHEN T.UNIT_TYPE_DESCR_E  = 'VILLA' AND T.TENANCY_STATUS = 'ACTIVE' THEN 1 END) VillaCountActiveTotal,
       COUNT(CASE WHEN T.UNIT_TYPE_DESCR_E  = 'STUDIO' AND T.TENANCY_STATUS = 'ACTIVE' THEN 1 END) StudioCountActiveTotal,
       COUNT(CASE WHEN T.UNIT_TYPE_DESCR_E  = 'DUPLEX' AND T.TENANCY_STATUS = 'ACTIVE' THEN 1 END) DuplexCountActiveTotal
FROM CMT WHERE COND1 = COND1 AND COND2=COND2
) , TAB2 AS 
(SELECT ROUND (SUM(RENTAL_VALUE_PER_UNIT)*0.05) ApartmentMuncipalFee FROM CMT T WHERE COND1 = COND1 
       AND T.unit_usage_type_descr_e = 'RESIDENTIAL' 
       AND T.UNIT_TYPE_DESCR_E  = 'APARTMENT'
       GROUP BY T.UNIT_TYPE_DESCR_E), TAB3 AS 
       (SELECT ROUND (SUM(RENTAL_VALUE_PER_UNIT)*0.05) VillaMuncipalFee FROM CMT T WHERE COND1 = COND1 
       AND T.unit_usage_type_descr_e = 'RESIDENTIAL' 
       AND T.UNIT_TYPE_DESCR_E  = 'VILLA'
       GROUP BY T.UNIT_TYPE_DESCR_E) 

select * from TAB1, TAB2, TAB3
       ```

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