如何使用案例陈述使用计数

时间:2019-01-30 00:15:17

标签: sql oracle plsql

我正在尝试获取项目总数,并使用case语句对它们进行分类。但是,我一直在重复重复这些项(现在归为“ inv”)(例如,“衣服”重复了4次,每次计数为1,而不是总数为4的一次)-如何获得摆脱那个?我在下面列出了期望的结果。

这是我的桌子:

表格BOX1

ITEM_NO ITEM             DATE
===================================
3130C   MARVEL_SHIRT     01-JAN-17
1845C   SPONGEBOB_BOXERS 03-DEC-18
A900C   CK_COAT          04-DEC-18
A988C   RIDER_JEANS      11-JAN-19
L350T   BARBIE           23-NOV-18
L129T   LEGO             09-OCT-18
LXZYT   BATMAN_FIG1      12-JAN-19

我的代码:

select (case substr (item_no,5,1)
    when 'C' then 'clothes'
    when 'T' then 'toys' else 'misc' end) inv, 
    count(item_no) total 
from box1 where date <= sysdate
    group by item

所需结果:

INV     TOTAL
===============
CLOTHES 4
TOYS    3

2 个答案:

答案 0 :(得分:1)

您需要按类别分组。

SELECT CASE substr(item_no, 5, 1)
         WHEN 'C' THEN
           'clothes'
         WHEN 'T' THEN
           'toys'
         ELSE
           'misc'
       END inv, 
       count(item_no) total 
       FROM box1
       WHERE date <= sysdate
       GROUP BY CASE substr(item_no, 5, 1)
                  WHEN 'C' THEN
                    'clothes'
                  WHEN 'T' THEN
                    'toys'
                  ELSE
                    'misc'
                END;

答案 1 :(得分:1)

由于表达的性质,您只需要汇总substr()

select (case substr(item_no, 5, 1)
            when 'C' then 'clothes'
            when 'T' then 'toys'
            else 'misc' 
        end) inv, 
       count(item_no) total 
from box1
where date <= sysdate
group by substr(item_no, 5, 1);