我是按类分组编写了一个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;
答案 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
表达式替换select
和group by
中的(case when card_type_cd < 50 then card_type_cd else 50 end)
。
您确实需要开始使用现代join
语法,其中连接条件位于on
子句中。