一尘不染

同一列上的不同值计数

sql

我是Oracle的新手。我有一个Oracle表有三列:serialnoitem_categoryitem_status。在第三列中的行具有值serviceableunder_repair
condemned

我想使用count运行查询,以显示可维修的数量,正在维修的数量,针对每个项目类别的谴责数量。

我想运行类似的东西:

select item_category
  , count(......) "total"
  , count (.....) "serviceable"
  , count(.....)"under_repair"
  , count(....) "condemned"
from my_table
group by item_category ......

我无法在计数内运行内部查询。

这是我希望结果集看起来像的样子:

item_category    total    serviceable      under repair      condemned
=============    =====    ============     ============      ===========
chair              18        10               5                3
table              12        6                3                3

阅读 150

收藏
2021-03-10

共1个答案

一尘不染

您可以在COUNT函数中使用CASE或DECODE语句。

  SELECT item_category,
         COUNT (*) total,
         COUNT (DECODE (item_status, 'serviceable', 1)) AS serviceable,
         COUNT (DECODE (item_status, 'under_repair', 1)) AS under_repair,
         COUNT (DECODE (item_status, 'condemned', 1)) AS condemned
    FROM mytable
GROUP BY item_category;

输出:

ITEM_CATEGORY   TOTAL   SERVICEABLE UNDER_REPAIR    CONDEMNED
----------------------------------------------------------------
chair           5       1           2               2
table           5       3           1               1
2021-03-10