2010-11-03 49 views
1

我有具有数据等组2行到Oracle 1使用SQL

 
state total 

A  3 

B  6 

C  2 

D  7 

E  4 

我需要从这个具有& B的总(真)产生一个表在一起并C,d表,E(False)

 
Result Table 

Status  Total 

True  9 (sum of A and B) 

False  13 (sum of C, D, E) 

任何想法如何使用SQL做到这一点?我在甲骨文这样做

回答

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

对不起。但我没有很好地解决这个问题。请看这个... – mahen 2010-11-03 18:12:21

+0

@mahen:看看是什么? – Quassnoi 2010-11-03 18:35:33

+0

@mahen:现在怎么样? – 2010-11-04 01:17:15

0

我会使用一个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; 

您可能需要按状态对每个查询,但我不知道作为列是虚拟的/静/标

0

我喜欢CASE - 我觉得它更容易比DECODE解释:

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; 

分享和享受。