得到相同的记录

本文介绍了一种使用WITH语句和decode函数实现的SQL连接查询方法,该方法能够将两个不同结构的数据表进行有效连接,以生成包含所有类型名称及其对应计数的年份列表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

t1的结构:
year    tname    cnt
-----------------------
2005    type1    10
2005    type3    20
2006    type3    15
2006    type2    30
2007    type2    20

t2的结构
seq       tname
---------------------
  1          type1
  2          type2
  3          type3

如何连接查询两表,得到结果如下:
year    tname   cnt

----------------------------
2005    type1    10
2005    type2   
2005    type3    20
2006    type1   
2006    type2    30
2006    type3    15
2007    type1   
2007    type2    20
2007    type3   

解决方法

WITH a AS (
SELECT '2005' YEAR ,'type1' TYPE ,10 cnt FROM dual
UNION
SELECT '2006' YEAR ,'type1' TYPE ,20 FROM dual
UNION
SELECT '2006' YEAR ,'type2' TYPE ,100 FROM dual
UNION
SELECT '2007' YEAR ,'type1' TYPE ,30 FROM dual
)

SELECT a.year,b.typename,CASE WHEN sum(decode(a.TYPE,b.typename,a.cnt,'0')) = 0 THEN '' WHEN  sum(decode(a.TYPE,b.typename,a.cnt,'0')) >0 THEN ''||sum(decode(a.TYPE,b.typename,a.cnt,'0')) END FROM a a ,(SELECT 'type1' typename FROM dual UNION SELECT  'type2'  FROM dual UNION SELECT 'type3'  FROM dual) b
GROUP BY a.year,b.typename ORDER BY a.year,b.typename

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值