Oracle通过group by对两个值进行分类并显示行格式

Oracle通过group by对两个值进行分类并显示特定格式

今天遇见一个问题:需要根据id和field对表sys进行分类,其中field只有两个值“1”和“0”,并且要求获取结果的返回样式如下:

idfield==1field==0
1217
13432

主要有两种方法采用两种方法解决(第一种较为繁琐,推荐第二种)

第一种方式

主要采用分类查询然后再全连接的方式,注意一定要全连接,如果是只用左连接或右连接会致使数据不全。

SELECT
	aa.id,"field==1","field==0"
FROM
	( SELECT id, COUNT( field ) "field==1" FROM sys WHERE field = 1 GROUP BY id ) aa FULL
  JOIN ( SELECT id, COUNT( field ) "field==0" FROM sys WHERE field = 0 GROUP BY id ) bb ON aa.id = bb.id

第二种方式

第二种方法主要利用了count(列名),其中如果该内容为null,则不进行计算,否则进行计算的原理,这样就将两个语句的连接查询转为一句,更为简便了。

SELECT
	id,
	count(decode( field, '1', 1, NULL )) "field==1",
	count(decode( field, '0', 1, NULL )) "field==0" 
FROM
	sysman
GROUP BY
	id

结果展示

在这里插入图片描述

发散思维

感觉还可以用行列转换的思维,这个方法还没有试,有待实验。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值