不同的值计入同一列

raj*_*aja 5 sql oracle pivot-table

我是Oracle的新手.我有一个Oracle表有三列:serialno,item_category和item_status.在第三列中的行具有值serviceable,under_repair或 condemned.

我想使用count来运行查询,以显示有多少是可维护的,有多少是在修复,有多少是针对每个项目类别被谴责的.

我想运行类似的东西:

select item_category
  , count(......) "total"
  , count (.....) "serviceable"
  , count(.....)"under_repair"
  , count(....) "condemned"
from my_table
group by item_category ......
Run Code Online (Sandbox Code Playgroud)

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

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

item_category    total    serviceable      under repair      condemned
=============    =====    ============     ============      ===========
chair              18        10               5                3
table              12        6                3                3 
Run Code Online (Sandbox Code Playgroud)

Noe*_*oel 15

您可以在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;
Run Code Online (Sandbox Code Playgroud)

输出:

ITEM_CATEGORY   TOTAL   SERVICEABLE UNDER_REPAIR    CONDEMNED
----------------------------------------------------------------
chair           5       1           2               2
table           5       3           1               1
Run Code Online (Sandbox Code Playgroud)


Bur*_*Ali 7

这是一个非常基本的"分组依据"查询.如果您搜索它,您会找到大量 有关如何使用它的 文档.

对于您的具体情况,您需要:

select item_category, item_status, count(*)
  from <your table>
 group by item_category, item_status;
Run Code Online (Sandbox Code Playgroud)

你会得到这样的东西:

item_category   item_status   count(*)
======================================
Chair           under_repair  7
Chair           condemned     16
Table           under_repair  3
Run Code Online (Sandbox Code Playgroud)

根据需要更改列顺序以达到您的目的