2017-08-16 4 views
0

Voici le DataSet:Comment puis-je ajouter un sous-total de valeurs de colonne spécifiques?

et voici le SQL je:

select f.DATE, f.PROD_STATUS, 
count (*) AS TOTAL 
from PROD_TABLE f 
where DATE = '04-MAY-17' 
GROUP BY f.DATE, f.PROD_STATUS 

Je suis en train d'obtenir la valeur pour 'SUCCESS' comme une colonne dans les résultats SQL:

(SUCCESS = READY_1 + READY_2 + READY_3 + READY_4 + READY_5) 

Je veux les résultats SQL pour ressembler à ceci:

this table.

Comment puis-je y parvenir?

+0

Je pense que vous pouvez utiliser 'pivot' dans l'oracle pour y parvenir. – Alam

Répondre

0

Vérifiez ceci:

with t as (
    select 1 as ready_1, 
     2 as ready_2, 
     3 as ready_3, 
     1 as in_process, 
     4 as fail, 
     5 as crash, 
     '5/4/2017' as dat 
    from dual 
    union all 
    select 2 as ready_1, 
     2 as ready_2, 
     3 as ready_3, 
     1 as in_process, 
     4 as fail, 
     0 as crash, 
     '5/5/2017' as dat 
    from dual 
) 

select dat, prod_stat, max(suc) over(partition by dat) as success, sum(value) over(partition by dat) as total 
from (
    select dat, prod_stat, value, sum(value) over (partition by dat) as suc 
    from t 
    unpivot( 
    value for prod_stat in (ready_1, ready_2, ready_3) 
) 

union all 

    select dat, prod_stat, value, null as suc 
    from t 
    unpivot( 
    value for prod_stat in (in_process, fail, crash) 
) 
) 

Résultat:

DAT   PROD_STAT SUCCESS TOTAL 
5/4/2017 READY_2  6 16 
5/4/2017 READY_1  6 16 
5/4/2017 CRASH   6 16 
5/4/2017 FAIL   6 16 
5/4/2017 IN_PROCESS  6 16 
5/4/2017 READY_3  6 16 
5/5/2017 FAIL   7 12 
5/5/2017 IN_PROCESS  7 12 
5/5/2017 CRASH   7 12 
5/5/2017 READY_2  7 12 
5/5/2017 READY_1  7 12 
5/5/2017 READY_3  7 12 
+0

Salut l3rutt, Merci pour la réponse. Question, cette clause ne fait-elle pas des valeurs des valeurs statiques? 1 comme ready_2, 1 comme ready_3, 1 comme in_process, 8 comme total, 5 comme, – SKINNY

+0

L'ensemble de données est les données existantes. Il y a 8 statuts de production, dont 5 additionnés, succès égal (somme de READY_1, 2, 3, 4, 5) – SKINNY

+0

@SKINNY éditer la réponse – I3rutt