SQL按年月分组

zouxinwang1993 2016-10-30 12:46:38
大家好!
如题,我想用SQL语句实现按年月分组数据,我使用的是sql server 2008R2

原始数据如图1:


其中三个字段和相应类型 id(int) , num(varchar(255), time(smalldatetime))。其中num是有重复值的(D1940和D2209)。

我想实现的分组效果如图2:


实现按照年份和日期,统计num字段出现过的次数(num相同的算一)

具体是用datepart函数 还是 convert 函数?
我还不太懂这个,还请大神们说的详细一点!
谢谢!

...全文
830 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_36563560 2016-10-31
  • 打赏
  • 举报
回复
函数的话 可以根据你的需要自己选择的
中国风 2016-10-30
  • 打赏
  • 举报
回复
SELECT  id ,
        CONVERT(VARCHAR(7), [time], 120) ,
        COUNT(DISTINCT num) AS 次数
FROM    Tab
GROUP BY id ,
        CONVERT(VARCHAR(7), [time], 120);
zouxinwang1993 2016-10-30
  • 打赏
  • 举报
回复
引用 5 楼 roy_88 的回复:
漏删了GROUP BY 后面的id ,你再试试 ID列是重排日期大小排序
SELECT  ROW_NUMBER()OVER(ORDER BY CONVERT(VARCHAR(7), [time], 120)) AS ID,
        CONVERT(VARCHAR(7), [time], 120) ,
        COUNT(DISTINCT num) AS 次数
FROM    Tab
GROUP BY 
        CONVERT(VARCHAR(7), [time], 120);
奥奥,这样行了,谢谢,非常感谢版主,这么耐心的给我解答~
中国风 2016-10-30
  • 打赏
  • 举报
回复
漏删了GROUP BY 后面的id ,你再试试 ID列是重排日期大小排序
SELECT  ROW_NUMBER()OVER(ORDER BY CONVERT(VARCHAR(7), [time], 120)) AS ID,
        CONVERT(VARCHAR(7), [time], 120) ,
        COUNT(DISTINCT num) AS 次数
FROM    Tab
GROUP BY 
        CONVERT(VARCHAR(7), [time], 120);
zouxinwang1993 2016-10-30
  • 打赏
  • 举报
回复
引用 3 楼 roy_88 的回复:
SELECT  ROW_NUMBER()OVER(ORDER BY CONVERT(VARCHAR(7), [time], 120)) AS ID,
CONVERT(VARCHAR(7), [time], 120) ,
COUNT(DISTINCT num) AS 次数
FROM Tab
GROUP BY id ,
CONVERT(VARCHAR(7), [time], 120);


这次这个语句查出来还是和上次的效果一样


2015-03,应该是两次(有一次相同),2015-12,应该是一次(因为相同一次)。
结果上却是分开显示的。
中国风 2016-10-30
  • 打赏
  • 举报
回复
SELECT  ROW_NUMBER()OVER(ORDER BY CONVERT(VARCHAR(7), [time], 120)) AS ID,
        CONVERT(VARCHAR(7), [time], 120) ,
        COUNT(DISTINCT num) AS 次数
FROM    Tab
GROUP BY id ,
        CONVERT(VARCHAR(7), [time], 120);
zouxinwang1993 2016-10-30
  • 打赏
  • 举报
回复
引用 1 楼 roy_88 的回复:
SELECT  id ,
CONVERT(VARCHAR(7), [time], 120) ,
COUNT(DISTINCT num) AS 次数
FROM Tab
GROUP BY id ,
CONVERT(VARCHAR(7), [time], 120);


语句执行完成后


2015-03应该是有两次的,D1094和006508。

但是结果只有1次?

22,301

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧