求大神帮写一个统计的SQL ~~~

朵啦 2014-10-11 02:48:11
业务需求如图:

需要最后统计结果 是这样的形式

现在表结构如下:


目前我写的SQL 根据 操作类型查询 只能查出某一个数据


要怎样才能把所有操作类型的数量 都查询出来 并且显示的结果 为业务需求图一样呢?

请多多指教!!
...全文
246 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
prowan 2014-10-27
  • 打赏
  • 举报
回复
兄台,你这个问题解决了么?如果还需要帮助请联系QQ (2051416768)
朵啦 2014-10-13
  • 打赏
  • 举报
回复
这样可以了

朵啦 2014-10-13
  • 打赏
  • 举报
回复
引用 13 楼 Haiwer 的回复:
现在是同一日期同一客服号一条数,你需要怎么去重复?

最好将现有数据期望的结果在电子表格做出来贴上就很明白了



我想对查询出来的结果集 进行分页 要知道总的条数
我该怎么写呢?

这样求count会报错阿 0.0
xiaodongni 2014-10-11
  • 打赏
  • 举报
回复
引用 15 楼 u012393569 的回复:
[quote=引用 13 楼 Haiwer 的回复:] 现在是同一日期同一客服号一条数,你需要怎么去重复? 最好将现有数据期望的结果在电子表格做出来贴上就很明白了
是这样的 有的时候 客服会点击2次已预约 就会有2条数据 在统计已预约的的时候 需要去掉重复的已已预约数! 就是不能单纯的SUM()来计算哦 [/quote]
引用 15 楼 u012393569 的回复:
[quote=引用 13 楼 Haiwer 的回复:] 现在是同一日期同一客服号一条数,你需要怎么去重复? 最好将现有数据期望的结果在电子表格做出来贴上就很明白了
是这样的 有的时候 客服会点击2次已预约 就会有2条数据 在统计已预约的的时候 需要去掉重复的已已预约数! 就是不能单纯的SUM()来计算哦 [/quote] 如果点了2次预约。数据库里面那些列是一样的。那些列不一样的。 你提供的数据里面有这种情况吗。没有的话加一行 看看 这种情况在数据库里面反映是啥样子的
还在加载中灬 2014-10-11
  • 打赏
  • 举报
回复
对数据源进一步处理, 再用他们的语句就可以得到结果了
朵啦 2014-10-11
  • 打赏
  • 举报
回复
引用 13 楼 Haiwer 的回复:
现在是同一日期同一客服号一条数,你需要怎么去重复? 最好将现有数据期望的结果在电子表格做出来贴上就很明白了
是这样的 有的时候 客服会点击2次已预约 就会有2条数据 在统计已预约的的时候 需要去掉重复的已已预约数! 就是不能单纯的SUM()来计算哦
reenjie 2014-10-11
  • 打赏
  • 举报
回复
引用 11 楼 u012393569 的回复:
为什么单独这样去除重复可以 这样写就报错呢?
再加一层select distinct(Price) from () as tt 就没有错了,因为sum()计算出来,作为新列的。
昵称被占用了 2014-10-11
  • 打赏
  • 举报
回复
现在是同一日期同一客服号一条数,你需要怎么去重复? 最好将现有数据期望的结果在电子表格做出来贴上就很明白了
还在加载中灬 2014-10-11
  • 打赏
  • 举报
回复
引用 10 楼 u012393569 的回复:
[quote=引用 8 楼 reenjie 的回复:] [quote=引用 6 楼 u012393569 的回复:] [quote=引用 3 楼 Haiwer 的回复:] 其他的自己对应
我还需要去除重复怎么办? [/quote] 将group by convert*varchar(10),CreateDate,120) ,Tracker 改为 select year(createDate) as 日期 group by year(createDate),Tracker [/quote] 不是日期哦 是去掉 预约数 已发送数 预约数 的重复[/quote] 没明白,已经没有重复了啊
朵啦 2014-10-11
  • 打赏
  • 举报
回复
为什么单独这样去除重复可以
这样写就报错呢?

朵啦 2014-10-11
  • 打赏
  • 举报
回复
引用 8 楼 reenjie 的回复:
[quote=引用 6 楼 u012393569 的回复:] [quote=引用 3 楼 Haiwer 的回复:] 其他的自己对应
我还需要去除重复怎么办? [/quote] 将group by convert*varchar(10),CreateDate,120) ,Tracker 改为 select year(createDate) as 日期 group by year(createDate),Tracker [/quote] 不是日期哦 是去掉 预约数 已发送数 预约数 的重复
朵啦 2014-10-11
  • 打赏
  • 举报
回复
引用 4 楼 ky_min 的回复:
行转列,可以用#2的CASE,SQL2005+ 可以用 PIVOT~~
不知道怎么样利用PIVOT来写这样的SQL
reenjie 2014-10-11
  • 打赏
  • 举报
回复
引用 6 楼 u012393569 的回复:
[quote=引用 3 楼 Haiwer 的回复:] 其他的自己对应
我还需要去除重复怎么办? [/quote] 将group by convert*varchar(10),CreateDate,120) ,Tracker 改为 select year(createDate) as 日期 group by year(createDate),Tracker
朵啦 2014-10-11
  • 打赏
  • 举报
回复
引用 5 楼 dotnetstudio 的回复:

    Declare @sql varchar(max)  
    set @sql=STUFF((select ','+QUOTENAME([OperateType])) from (select Tracker,OperateType,COUNT(1) as total  from ScenicTicketsLog
group by Tracker, OperateType) t group by [OperateType] FOR XML PATH('')) ,1,1,'')  
    set @sql='select * from (select Tracker,OperateType,COUNT(1)  from ScenicTicketsLog
group by Tracker, OperateType) t  
              pivot (sum([total])for [OperateType] in ('+@sql+')) a '  
    exec(@sql)  
好牛逼的样子 但是看不太懂哦~ FOR XML PATH('') 这是什么意思阿?
朵啦 2014-10-11
  • 打赏
  • 举报
回复
引用 3 楼 Haiwer 的回复:
其他的自己对应



我还需要去除重复怎么办?

KeepSayingNo 2014-10-11
  • 打赏
  • 举报
回复

    Declare @sql varchar(max)  
    set @sql=STUFF((select ','+QUOTENAME([OperateType])) from (select Tracker,OperateType,COUNT(1) as total  from ScenicTicketsLog
group by Tracker, OperateType) t group by [OperateType] FOR XML PATH('')) ,1,1,'')  
    set @sql='select * from (select Tracker,OperateType,COUNT(1)  from ScenicTicketsLog
group by Tracker, OperateType) t  
              pivot (sum([total])for [OperateType] in ('+@sql+')) a '  
    exec(@sql)  
还在加载中灬 2014-10-11
  • 打赏
  • 举报
回复
行转列,可以用#2的CASE,SQL2005+ 可以用 PIVOT~~
昵称被占用了 2014-10-11
  • 打赏
  • 举报
回复
其他的自己对应
昵称被占用了 2014-10-11
  • 打赏
  • 举报
回复
select convert*varchar(10),CreateDate,120) as Date,Tracker ,sum(case when OperateType = '已预约操作' then 1 else 0 end) as 已经预约数 ,sum(case when OperateType = '预约操作' then 1 else 0 end) as 预约数 ... from ScenicTicketsLog where isDelete = 0 group by convert*varchar(10),CreateDate,120) ,Tracker
reenjie 2014-10-11
  • 打赏
  • 举报
回复
你能解释operateType中的数据为什么时分别对应自动认领,被分配,已发送,已预约,预约?

22,209

社区成员

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

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