Сгруппировать 2 строки в 1 в Oracle, используя SQL - PullRequest
1 голос
/ 03 ноября 2010

У меня есть таблица, в которой есть данные типа

state   total   

A       3   

B       6

C       2 

D       7

E       4

Мне нужно сгенерировать из нее таблицу, в которой будет суммарно 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)

Есть идеи, как это сделать с помощью SQL?Я делаю это в Oracle

Ответы [ 3 ]

6 голосов
/ 03 ноября 2010
SELECT  nstate, SUM(total)
FROM    (
        SELECT  DECODE(state, 'A', 'True', 'B', 'True', 'False') AS nstate, total
        FROM    mytable
        )
GROUP BY
        nstate
0 голосов
/ 04 ноября 2010

Мне нравится 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;

Делись и наслаждайся.

0 голосов
/ 04 ноября 2010

Я бы использовал 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;

. Возможно, вам потребуется группировать данные по статусу для каждого запроса, но я не уверен, так как столбец является виртуальным / статическим / скалярным

...