SQL语句批量查询~

[复制链接]
查看11 | 回复5 | 2008-10-22 10:58:10 | 显示全部楼层 |阅读模式
数据库中有表[table1]
结构
id[int,标识]
地点名称[varchar(MAX)]
地点里程[varchar(MAX)]
日期[datetime]
记录有:
1, 北路, 600.158,2008-10-10
2, 北路, 601.528,2008-10-10
3, 北路, 604.153,2008-10-10
4, 北路, 602.453,2008-10-10
5, 南路, 600.958,2008-10-10
......
假如有1万条数据。
我要查询:2008-10-10至2008-10-17日之间的 “北路” 600.000 到 605.000 之间每隔0.100有多少条记录?
也就是说,地点里程为600.000-600.099之间有多少条记录,600.100-600.199之间有多少条记录。。
至到604.900-604.999,总共要有50多条查询。
特别注意:(地点里程是varchar(MAX)字符类型,是不是还要转换?)
如果优化查询条件?
如果有高人指点200分送上~QQ:3084532
我的地点里程是字符类型。~~如何在SQL语句中转换?

回复

使用道具 举报

千问 | 2008-10-22 10:58:10 | 显示全部楼层
思路:可以使用存储过程,通过循环、拼接SQL语句,将结果循环插入另一张表用于保存记录数。----以下是代码实现IFEXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[CountTable]') AND type in (N'U'))DROP TABLE [dbo].[CountTable]GOCREATE TABLE [dbo].[CountTable]( [CountNum] [int] NULL) ON [PRIMARY]declare @low floatdeclare @high floatdecla...
回复

使用道具 举报

千问 | 2008-10-22 10:58:10 | 显示全部楼层
不用这样麻烦!设计思路:地点里程*10且取整 分组 后就是间隔0.100的分组。注意:地点里程字段必须是有效的数字类型。select count(id) as 数量,里程分段 from(select id,地点名称,地点里程,日期,floor(cast(地点里程 as numeric(12,4))*10) as 里程分段from tabl...
回复

使用道具 举报

千问 | 2008-10-22 10:58:10 | 显示全部楼层
SELECT count(*) from table1 where table1.地点名称 = '北路' and table1.日期 >= '2008-10-10'and table1.地点里程 between 600.100 and 600.199; 再编个程序 地点里程每次加0.1执行一次查询,就好了在MySql中测试通过,地点里程是va...
回复

使用道具 举报

千问 | 2008-10-22 10:58:10 | 显示全部楼层
感觉charlif 的思路很好,但就是结果没有将间隔的起始与终止列出来,例如起始 600.100终止600.199,SQL语句如下:declare @low float declare @high float declare @addnum float set @low = 600.000 set @high = 605.00...
回复

使用道具 举报

千问 | 2008-10-22 10:58:10 | 显示全部楼层
SELECTCAST(L.里程段 AS DECIMAL(10,3)) 里程段,COUNT(1) 计数FROM (SELECT FLOOR(CAST(里程 AS FLOAT) * 10) / 10 里程段 FROM [Test] WHERE 地点名称 = '北路' AND 日期 BETWEEN '2008-10-10' AND '2008-10-1...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行