SQL Server按日期统计healthRegistration表健康填报不同状态条数的实现方法
SQL Server 按日期统计健康登记数据的实现方案
你可以通过条件聚合+日期格式化的方式实现需求,SQL Server 中Bool类型实际映射为bit类型,取值0代表False,1代表True,具体查询语句如下:
SELECT CAST(RegisterDateTime AS DATE) AS 登记日期, SUM(CASE WHEN RUFeelingWell = 0 THEN 1 ELSE 0 END) AS 当日RUFeelingWell为False的记录总数, SUM(CASE WHEN RUFeelingWell = 1 THEN 1 ELSE 0 END) AS 当日RUFeelingWell为True的记录总数 FROM healthRegistration GROUP BY CAST(RegisterDateTime AS DATE) -- 可选按日期排序,方便查看最新记录 ORDER BY 登记日期 DESC;
语句说明
- 用
CAST(RegisterDateTime AS DATE)把带时分秒的登记时间转换为纯日期格式,实现按天分组统计 - 条件聚合逻辑:通过
CASE语句判断RUFeelingWell的取值,匹配对应值就计数1,否则计数0,再通过SUM求和得到对应分类的总数量 - 最后通过
GROUP BY按转换后的日期维度聚合数据
如果使用SQL Server 2012及以上版本,还可以用更简洁的IIF函数简化写法:
SELECT CAST(RegisterDateTime AS DATE) AS 登记日期, SUM(IIF(RUFeelingWell = 0, 1, 0)) AS 当日RUFeelingWell为False的记录总数, SUM(IIF(RUFeelingWell = 1, 1, 0)) AS 当日RUFeelingWell为True的记录总数 FROM healthRegistration GROUP BY CAST(RegisterDateTime AS DATE)
内容的提问来源于stack exchange,提问作者Felipe K. Bernardino
相关产品推荐
相关产品推荐

