簡體   English   中英

Oracle SQL 按多個字段計數和分組

[英]Oracle SQL count and group by multiple fields

我能夠獲得合並兩個表的數據以獲得下表。

+------------+------+--------+--------+------------+------------+
| Group Name | Type | Manger | Status | ControlOne | ControlTwo |
+------------+------+--------+--------+------------+------------+
| Group A    |    1 |      1 | finish |          2 |          2 |
| Group A    |    2 |      1 | open   |          0 |          2 |
| Group A    |    1 |      1 | finish |          0 |          0 |
| Group A    |    1 |      2 | finish |          2 |          0 |
| Group B    |    1 |      1 | open   |          2 |          0 |
| Group B    |    1 |      2 | open   |          2 |          2 |
| Group B    |    2 |      2 | open   |          0 |          2 |
| Group B    |    2 |      1 | finish |          0 |          0 |
| Group B    |    1 |      1 | open   |          2 |          0 |
+------------+------+--------+--------+------------+------------+

現在我需要根據 GroupName/Type 和 Manager 獲取總計數,以便按以下格式輸出每個組:

+------------+------+-------------------------------------------------+--------------------------------------------+------------------------------+----------------------------+
| Group Name | Type |                 Manager1Finish                  |                Manager1Open                |        Manager2Finish        |        Manager2Open        |
+------------+------+-------------------------------------------------+--------------------------------------------+------------------------------+----------------------------+
| Group A    |    1 | 2(count of finish by Group A, manager1, type 1) | 0(count of open Manager1, Type 1, Group A) | 1(count of finish Manager 2) | 0(count of open manager 2) |
| Group A    |    2 | 0                                               | 1                                          | 0                            | 0                          |
+------------+------+-------------------------------------------------+--------------------------------------------+------------------------------+----------------------------+

你能幫助我如何實現這一目標嗎?

在以下情況下嘗試使用 CASE:

  SELECT GroupName,
         TYPE,
         COUNT (CASE
                   WHEN     Manager = 1
                        AND status = 'Finish'
                   THEN
                      1
                END)
            AS Manager1Finish,
         COUNT (CASE
                   WHEN     Manager = 1
                        AND status = 'Open'
                   THEN
                      1
                END)
            AS Manager1Open,
         COUNT (CASE
                   WHEN     Manager = 2
                        AND status = 'Finish'
                   THEN
                      1
                END)
            AS Manager2Finish,
         COUNT (CASE
                   WHEN     Manager = 2
                        AND status = 'Open'
                   THEN
                      2
                END)
            AS Manager2Open
    FROM tablename
GROUP BY GroupName, TYPE
select [group], [type],
sum(case when manager=1 and status='finish' then 1 else 0 end) as m1finish,
sum(case when manager=1 and status='open' then 1 else 0 end) as m1open,
sum(...etc...)
from mytable
group by [group],[type]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM