查询到单行中不同组的计数

时间:2014-02-14 20:42:47

标签: sql

我是按类分组编写了一个sql,结果如下所示

Car_type_cd   COUNT(1)

   30           123
   40           49798 
   50           10
   60           20
   70           30

现在我的要求是,如果card_type_cd是30或40我需要个人计数,否则我需要计数,即(30 + 10 + 20 = 60)。结果如下:

Card_type_cd   count(1)
   30            123
   40            49798
   50            60

有人可以为此提供一些方法吗?

以下是声明:

  SELECT ct.card_type_desc,
         count(1) 
    FROM nss.customer_alias ca, 
         nss.card_type ct, 
         nss.acct_no_store ans, 
         nss.nss_order n, 
         nss.order_line l, 
         nss.fulfillment_Schedule fs 
   WHERE ca.card_type_cd in (30,40,1260,1280,1340,3040) 
     AND ca.acct_seq = ans.acct_seq 
     AND ca.cust_id = ans.cust_id 
     AND ca.cust_id = n.cust_id 
     AND ca.card_type_cd = ct.card_type_cd 
     AND n.ordeR_id = l.order_id 
     AND l.cancel_date IS NULL 
     AND l.order_id = fs.order_id 
     AND l.line_item = fs.line_item 
     AND fs.renewal_date > SYSDATE 
GROUP BY ct.card_type_desc; 

1 个答案:

答案 0 :(得分:2)

您可以使用case语句来定义组。这是组合团队的有效方法。在这种情况下,您可以直接在card_type_cd上执行此操作:

select (case when card_type_cd < 50 then card_type_cd else 50 end) as card_type_cd,
       count(*) -- or whatver
from YourTableHere t
group by (case when card_type_cd < 50 then card_type_cd else 50 end) 
order by 1;

对于您的查询,您可以使用card_type_cd表达式替换selectgroup by中的(case when card_type_cd < 50 then card_type_cd else 50 end)

您确实需要开始使用现代join语法,其中连接条件位于on子句中。