在Oracle中使用SQL将2行分组为1行
我有一个表,其中包含如下数据 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之和)在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)
你知道如何使用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;
分享和享受