2010-11-03 15 views
1

I ont une table qui contient des données commeGroupe 2 lignes dans 1 à Oracle en utilisant SQL

 
state total 

A  3 

B  6 

C  2 

D  7 

E  4 

I besoin de générer une table à partir de ce qui a un total de A & B (true) ensemble et C, D , E (faux) ensemble

 
Result Table 

Status  Total 

True  9 (sum of A and B) 

False  13 (sum of C, D, E) 

Des idées pour faire cela en utilisant SQL? Je fais ceci dans Oracle

Répondre

6
SELECT nstate, SUM(total) 
FROM (
     SELECT DECODE(state, 'A', 'True', 'B', 'True', 'False') AS nstate, total 
     FROM mytable 
     ) 
GROUP BY 
     nstate 
+0

Je suis désolé. Mais je n'ai pas bien cadré la question. S'il vous plaît voir cela ... – mahen

+0

@mahen: voir quoi? – Quassnoi

+0

@mahen: qu'en est-il maintenant? –

0

j'utiliser une requête UNION

SELECT 'True' AS Status, SUM(total) AS Total 
FROM table 
WHERE state IN ('A', 'B') 
UNION 
SELECT 'False' AS STATUS, SUM(total) AS Total 
FROM table 
WHERE state IN ('C', 'D', 'E') 
ORDER BY Status DESC; 

Vous devrez peut-être un groupe par l'état de chaque requête, mais je ne suis pas sûr que la colonne est virtuelle/statique/scalaire

0

J'aime CASE - Je pense qu'il est plus facile à interpréter que Décodage:

CREATE TABLE RESULT_TABLE AS 
    SELECT STATE, SUM(TOTAL) AS TOTAL 
    FROM (SELECT CASE STATE 
        WHEN 'A' THEN 'True' 
        WHEN 'B' THEN 'True' 
        ELSE 'False' 
       END AS STATE, 
       TOTAL 
      FROM MY_TABLE) 
    GROUP BY STATE; 

Partagez et appréciez.