首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 请教高手sql语句 [已结贴,结贴人:fog25]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • fog25
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 揭帖率:
    发表于:2008-01-10 11:02:35 楼主
    sql server2000的数据库,表a记录如下:
    时间    货物名单
    8:00  西瓜
    8:01  西瓜
    8:02  西瓜
    8:03  西瓜
    8:05  西瓜
    8:55  西瓜
    8:56  香蕉
    8:57  香蕉
    8:57  西瓜
    8:58  苹果
    8:59  苹果
    9:58  西瓜
    9:59  西瓜

    问题:
    我要得出以下两种结果:

    第一种
    地方    次数
    西瓜    6
    香蕉    2
    西瓜    1
    苹果    2
    西瓜    2


    第二种
    地方    次数 时间段
    西瓜    6  8:00 8:55
    香蕉    2  8:56 8:57
    西瓜    1  8:57 8:57
    苹果    2  8:58 8:59
    西瓜    2  9:58 9:59

    请用sql语句实现,另外,第二种结果是否需要用编程实现?高手指点!!


    100  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • yiyi_wx
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-01-10 11:07:271楼 得分:0
    第一种:
    select distinct 货物名单,count(货物名单) as 次数 from tb group by 货物名单
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • pt1314917
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-01-10 11:14:592楼 得分:0
    有一个SQL语句实现有点难度```
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • fog25
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-01-10 11:15:023楼 得分:0
    yiyi_wx ,你的语句会把全部西瓜归为一类的,但是我这里要按照是否连续的状况把西瓜分为几类来统计
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • yiyi_wx
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-01-10 11:21:294楼 得分:0
    哦,不好意思,没看清楚~
    好像不会了,帮你顶吧
    ^_^
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • coolingpipe
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-01-10 11:26:065楼 得分:60
    两个结果不一样吗?只是多了一列而已吧
    SQL code
    --建表 create table test ( 时间 varchar(10), 货物名单 varchar(10) ) --插入数据 insert into test select '8:00', '西瓜' insert into test select '8:01', '西瓜' insert into test select '8:02', '西瓜' insert into test select '8:03', '西瓜' insert into test select '8:05', '西瓜' insert into test select '8:55', '西瓜' insert into test select '8:56', '香蕉' insert into test select '8:57', '香蕉' insert into test select '8:57', '西瓜' insert into test select '8:58', '苹果' insert into test select '8:59', '苹果' insert into test select '9:58', '西瓜' insert into test select '9:59', '西瓜' --查询 select 货物名单,cast(count(1) as varchar) + '' as 次数 , min(时间) + ' ' + max(时间) as 时间段 from ( select * , ord = (select isnull(max(时间),0) from test where 时间 < a.时间 and 货物名单<> a.货物名单) from test a )b group by 货物名单,ord /* --结果 货物名单 次数 时间段 ---------- -------------------------------- ---------------------- 西瓜 6次 8:00 8:55 香蕉 2次 8:56 8:57 西瓜 1次 8:57 8:57 苹果 2次 8:58 8:59 西瓜 2次 9:58 9:59 (所影响的行数为 5 行) */
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • dobear_0922
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-01-10 11:26:216楼 得分:0
    要按照是否连续的状况把西瓜分为几类来统计

    ---------
    这个有点麻烦
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • mengmou
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-01-10 11:27:137楼 得分:40
    --建立测试环境
    create table tb(id INT IDENTITY,时间 varchar(10),货物名单 varchar(10))
    insert tb(时间,货物名单)
    select '8:00','西瓜' union all
    select '8:01','西瓜' union all
    select '8:02','西瓜' union all
    select '8:03','西瓜' union all
    select '8:05','西瓜' union all
    select '8:55','西瓜' union all
    select '8:56','香蕉' union all
    select '8:57','香蕉' union all
    select '8:57','西瓜' union all
    select '8:58','苹果' union all
    select '8:59','苹果' union all
    select '9:58','西瓜' union all
    select '9:59','西瓜'
    go
    --执行测试语句
    select 货物名单,COUNT(1) AS 次数,min(时间) as 开始时间,max(时间) as 结束时间
    from(
    select a.id,a.时间,a.货物名单,count(1) as ii
    from tb a
    join tb b on b.货物名单=a.货物名单 and b.时间 <=a.时间
    group by a.时间,a.id,a.货物名单
    )c
    group by 货物名单, id-c.ii
    go
    --删除测试环境
    drop table tb
    go
    /*--测试结果
    货物名单      次数          开始时间      结束时间
    ---------- ----------- ---------- ----------
    西瓜        6          8:00      8:55
    西瓜        1          8:57      8:57
    西瓜        2          9:58      9:59
    香蕉        2          8:56      8:57
    苹果        2          8:58      8:59

    (5 row(s) affected)
    */

    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • fa_ge
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-01-10 11:37:198楼 得分:0
    SQL code
    create table # (时间 varchar(10), 货物名单 varchar(10)) insert into # select '8:00', '西瓜' union all select '8:01', '西瓜' union all select '8:02', '西瓜' union all select '8:03', '西瓜' union all select '8:05', '西瓜' union all select '8:55', '西瓜' union all select '8:56', '香蕉' union all select '8:57', '香蕉' union all select '8:57', '西瓜' union all select '8:58', '苹果' union all select '8:59', '苹果' union all select '9:58', '西瓜' union all select '9:59', '西瓜' --第一种 select 货物名单,count(col)as '次数' from ( select *,col=(select count(1) from # where 时间<a.时间 and 货物名单<>a.货物名单) from # a )a group by col,货物名单 /* 货物名单 次数 ---------- ----------- 苹果 2 西瓜 6 西瓜 1 西瓜 2 香蕉 2 (所影响的行数为 5 行) */ --第二种 select 货物名单,count(col)as '次数',min(时间)+'-'+max(时间) from ( select *,col=(select count(1) from # where 时间<a.时间 and 货物名单<>a.货物名单) from # a )a group by col,货物名单 /* 货物名单 次数 ---------- ----------- --------------------- 苹果 2 8:58-8:59 西瓜 6 8:00-8:55 西瓜 1 8:57-8:57 西瓜 2 9:58-9:59 香蕉 2 8:56-8:57 (所影响的行数为 5 行) */
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • fa_ge
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-01-10 11:38:409楼 得分:0
    我没有排序,楼主自己排下
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • fa_ge
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-01-10 11:40:2310楼 得分:0
    SQL code
    select 货物名单,count(col)as '次数',min(时间)+'-'+max(时间) as '时间段' from ( select *,col=(select count(1) from # where 时间<a.时间 and 货物名单<>a.货物名单) from # a )a group by col,货物名单 order by min(时间)+'-'+max(时间) /* 货物名单 次数 ---------- ----------- --------------------- 西瓜 6 8:00-8:55 香蕉 2 8:56-8:57 西瓜 1 8:57-8:57 苹果 2 8:58-8:59 西瓜 2 9:58-9:59 (所影响的行数为 5 行) */
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • pt1314917
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-01-10 11:44:2211楼 得分:0
    鶴嘯九天

    赞一个。。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • Sagy
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-01-10 11:45:4312楼 得分:0
    太强了!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • dobear_0922
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-01-10 11:54:1913楼 得分:0
    冷箫轻笛的方法不错,赞一个,,,
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • dobear_0922
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-01-10 11:56:5714楼 得分:0
    SQL code
    select 货物名单,count(col)as '次数',min(时间)+'-'+max(时间) as '时间段' from ( select *,col=(select count(1) from # where 时间<a.时间 and 货物名单<>a.货物名单) from # a )a group by col,货物名单 order by min(时间)+'-'+max(时间) --鹤兄,这里可以直接: order by 时间段 /* 货物名单 次数 ---------- ----------- --------------------- 西瓜 6 8:00-8:55 香蕉 2 8:56-8:57 西瓜 1 8:57-8:57 苹果 2 8:58-8:59 西瓜 2 9:58-9:59 (所影响的行数为 5 行) */
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • fog25
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-01-10 12:20:2315楼 得分:0
    谢谢大家!
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved