2017-09-18 5 views
0

J'ai besoin d'aide dans ma requête. Je suis en train de diviser une somme d'une colonne avec différentes conditions WHERE par exempleDiviser des sommes avec différentes conditions WHERE

SELECT 
    TO_CHAR(PS.REPORT_PERIOD_END_DATE, 'YYYY') AS YR, 
    SUM(T1.PRICE) AS COLUMN_1 
FROM TABLE_ONE T1 
    INNER JOIN SUB_STATUSES status ON status.SUB_ID = T1.ID 
    WHERE status.R_SUB_STATUS_CODE = 'COMPLETED' 
AND T1.TYPE = 'COMPANY' OR T1.TYPE = 'SMALL_BUSINESS' 
GROUP BY TO_CHAR(PS.REPORT_PERIOD_END_DATE, 'YYYY') 
ORDER BY TO_CHAR(PS.REPORT_PERIOD_END_DATE, 'YYYY') DESC 

DIVIDE BY 

SELECT 
TO_CHAR(PS.REPORT_PERIOD_END_DATE, 'YYYY') AS YR, 
    SUM(T1.PRICE) AS COLUMN_1 
from TABLE_ONE T1 
    INNER JOIN SUB_STATUSES status ON status.SUB_ID = T1.ID 
    WHERE status.R_SUB_STATUS_CODE = 'COMPLETED' 
AND T1.TYPE = 'LOT' OR T1.TYPE = 'LAND' 
GROUP BY TO_CHAR(PS.REPORT_PERIOD_END_DATE, 'YYYY') 
ORDER BY TO_CHAR(PS.REPORT_PERIOD_END_DATE, 'YYYY') DESC 

La première colonne retourne ceci:

2017 1094 
2016 89 
2015 95 
2014 101 
2013 113 
2012 173 
2011 191 
2010 165 
+0

Pouvez-vous montrer les tables d'origine? – Ghemon

Répondre

1

Utilisez une déclaration de cas au lieu d'une clause where. Les vérifications de requêtes externes se divisent par zéro.

SELECT yr, case when column_2 <> 0 then column_1/column2 else 0 end divcol 
FROM (
    SELECT 
    TO_CHAR(PS.REPORT_PERIOD_END_DATE, 'YYYY') AS YR, 
    SUM(case when t1.type in ('COMPANY', 'SMALL_BUSINESS') THEN T1.PRICE ELSE 0 END) as COLUMN_1, 
    SUM(case when t1.type in ('LOT', 'LAND') THEN T1.PRICE ELSE 0 end) AS COLUMN_2 
    FROM TABLE_ONE T1 
     INNER JOIN SUB_STATUSES status ON status.SUB_ID = T1.ID 
    WHERE status.R_SUB_STATUS_CODE = 'COMPLETED' 
    GROUP BY TO_CHAR(PS.REPORT_PERIOD_END_DATE, 'YYYY') 
) 
ORDER BY yr DESC