简体   繁体   English

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

[英]Group 2 rows into 1 in Oracle using SQL

I have a table which has data like 我有一个表,其数据如下

state   total   

A       3   

B       6

C       2 

D       7

E       4

I need to generate a table from this that has total of A & B (true) together and C, D, E (False) together 我需要从中生成一个表,该表的总和为A&B(true)和C,D,E(False)

Result Table

Status     Total

True        9 (sum of A and B )

False       13 (sum of C, D, E)

Any ideas how to do this using SQL? 任何想法如何使用SQL做到这一点? I am doing this in Oracle 我正在Oracle中这样做

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

I'd use a UNION query 我会使用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;

You may need to group by Status on each query but I'm not sure as the column is virtual / static / scalar 您可能需要在每个查询中按状态分组,但我不确定,因为该列是虚拟/静态/标量

I like CASE - I think it's easier to interpret than DECODE: 我喜欢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;

Share and enjoy. 分享并享受。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM