在Oracle中使用SQL将2行分组为1行

在Oracle中使用SQL将2行分组为1行,sql,oracle,aggregate,aggregate-functions,Sql,Oracle,Aggregate,Aggregate Functions,我有一个表,其中包含如下数据 state total A 3 B 6 C 2 D 7 E 4 州总数 A 3 B 6 C2 D 7 E 4 我需要从中生成一个表,其中a和B(真)加在一起,C、D、E(假)加在一起 结果表 状态总数 真9(A和B之和) 假13(C、D、E之和) 你知道如何使用SQL实现这一点吗?我在Oracle中执行此操作我将使用联合查询 SELECT nstate, SUM(total)

我有一个表,其中包含如下数据

state total A 3 B 6 C 2 D 7 E 4 州总数 A 3 B 6 C2 D 7 E 4 我需要从中生成一个表,其中a和B(真)加在一起,C、D、E(假)加在一起

结果表 状态总数 真9(A和B之和) 假13(C、D、E之和)
你知道如何使用SQL实现这一点吗?我在Oracle中执行此操作

我将使用
联合
查询

SELECT  nstate, SUM(total)
FROM    (
        SELECT  DECODE(state, 'A', 'True', 'B', 'True', 'False') AS nstate, total
        FROM    mytable
        )
GROUP BY
        nstate
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;

您可能需要在每个查询上按状态分组,但我不确定,因为该列是虚拟/静态/标量

我将使用
联合
查询

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;

您可能需要在每个查询上按状态分组,但我不确定,因为该列是虚拟/静态/标量的

我喜欢大小写-我认为解释比解码更容易:

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;

分享和享受。

我喜欢案例——我认为它比解码更容易理解:

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;
分享和享受