oracle 与ms sql对日期字段使用group by

博客介绍了Oracle与MS SQL对日期字段使用Group By的不同方法。在Oracle中,可使用to_char或trunc函数处理日期字段;在MS SQL中,可按月份分组或使用CONVERT函数处理日期后分组。


oracle 与ms sql对日期字段使用group by

oracle:

select to_char(date_time,'yyyymmdd'),count(*) from table_name where ……
group by to_char(date_time,'yyyymmdd')
order by to_char(date_time,'yyyymmdd')

select trunc(date_time),count(*)
from table_name
where .......
group by trunc(date_time)

ms sql:

SELECT SUM(field_name) FROM table_name GROUP BY month(date_time)
--上面这句只和月份有关,与年份无关

SELECT SUM(field_name) FROM table_name GROUP BY CONVERT(char(10),date_time,121)

Oracle语句中,`group by`的字段是可以使用`case when`的。`case when`是条件表达式,可用于根据不同条件返回不同的值。在`group by`子句里使用`case when`,能依据特定条件对数据分组。 以引用[2]中的SQL为例,虽然没有直接在`group by`中使用`case when`,但展示了`case when`在查询中的运用。可以通过改写该SQL,在`group by`中使用`case when`,示例如下: ```sql SELECT CASE WHEN tmp.IFRECHECK = 0 THEN '未复核' WHEN tmp.IFRECHECK = 1 THEN '已复核' ELSE '其他' END AS check_status, wm_concat(tmp.ALARM_ID) alarmId, max( tmp.ADDTIME ) maxtime, min( tmp.ADDTIME ) mintime, max( tmp.PLAN_DETAIL_ID ) id, max( tmp.IFRECHECK ) IFRECHECK, count( tmp.msg ) num, max( tmp.MSG_STATE ) msgState, max( tmp.SMALLCLASSDESC ) smallClassDesc FROM ( SELECT DISTINCT b.MSG, b.ALARM_ID, b.ADDTIME, b.MSG_STATE, w.PLAN_DETAIL_ID, w.IFRECHECK, CASE WHEN w.IFRECHECK = 0 THEN ( SELECT s.SMALL_CLASS_DESC FROM SQMT_PLAN_DETAIL s WHERE s.id = w.PLAN_DETAIL_ID ) WHEN w.IFRECHECK = 1 THEN ( SELECT p.SMALL_CLASS_DESC FROM SQMT_PLAN_RECHECK p WHERE p.id = w.PLAN_DETAIL_ID ) END smallClassDesc FROM SQMT_ALARM b LEFT JOIN SQMT_DEVICE_WATCH w ON b.MSG = w.RFIDNUMBER WHERE b.MSG_STATE = 0 AND find_in_set ( 'liuanbo', b.SEND_USER_ID ) > 0 ORDER BY b.MSG_STATE, b.ADDTIME DESC ) tmp GROUP BY CASE WHEN tmp.IFRECHECK = 0 THEN '未复核' WHEN tmp.IFRECHECK = 1 THEN '已复核' ELSE '其他' END; ``` 在这个改写后的SQL中,`group by`子句使用了`case when`表达式,依据`IFRECHECK`字段的值将数据分为“未复核”“已复核”和“其他”三组。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值