如何实现这样的sql sqrver 查询语句? ( 积分: 100 )

  • 主题发起人 主题发起人 krooman
  • 开始时间 开始时间
K

krooman

Unregistered / Unconfirmed
GUEST, unregistred user!
我有一个表lssj,表结构如下:<br><br>&nbsp;id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;date&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;feiyu<br>&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;张三&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2007-12-1&nbsp;07:23:12&nbsp;&nbsp;&nbsp;&nbsp;1<br>&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;张三&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2007-12-1&nbsp;09:23:02&nbsp;&nbsp;&nbsp;&nbsp;1<br>&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;李四&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2007-12-1&nbsp;07:31:42&nbsp;&nbsp;&nbsp;&nbsp;1<br>&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;张三&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2007-12-1&nbsp;11:23:22&nbsp;&nbsp;&nbsp;&nbsp;1<br>&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;王五&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2007-12-1&nbsp;07:56:10&nbsp;&nbsp;&nbsp;&nbsp;1<br>&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;王五&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2007-12-1&nbsp;17:43:19&nbsp;&nbsp;&nbsp;&nbsp;1<br>&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;李四&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2007-12-1&nbsp;12:23:59&nbsp;&nbsp;&nbsp;&nbsp;1<br>&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;张三&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2007-12-2&nbsp;07:23:12&nbsp;&nbsp;&nbsp;&nbsp;1<br>&nbsp;&nbsp;9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;张三&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2007-12-3&nbsp;09:23:02&nbsp;&nbsp;&nbsp;&nbsp;1<br>&nbsp;&nbsp;10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;李四&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2007-12-4&nbsp;07:31:42&nbsp;&nbsp;&nbsp;&nbsp;1<br>&nbsp;&nbsp;11&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;张三&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2007-12-3&nbsp;11:23:22&nbsp;&nbsp;&nbsp;&nbsp;1<br>&nbsp;&nbsp;12&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;王五&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2007-12-5&nbsp;07:56:10&nbsp;&nbsp;&nbsp;&nbsp;1<br>&nbsp;&nbsp;13&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;王五&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2007-12-7&nbsp;17:43:19&nbsp;&nbsp;&nbsp;&nbsp;1<br>&nbsp;&nbsp;14&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;李四&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2007-12-8&nbsp;12:23:59&nbsp;&nbsp;&nbsp;&nbsp;1<br><br>&nbsp;&nbsp;&nbsp;....................<br><br>&nbsp;我想要实现统计,即输入一段日期,可以统计出这段日期内每天的次数之和。<br>&nbsp;例如2007-12-1到2007-12-10之间,每天的次数之和,如果某天没有就显示0.<br><br>&nbsp;最后显示的结果是<br><br>&nbsp;&nbsp;&nbsp;日期&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;次数<br>&nbsp;2007-12-1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;7<br>&nbsp;2007-12-2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1<br>&nbsp;2007-12-3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3<br>&nbsp;2007-12-4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1<br>&nbsp;2007-12-5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1<br>&nbsp;2007-12-6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<br>&nbsp;2007-12-7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1<br>&nbsp;2007-12-8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1<br>&nbsp;2007-12-9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<br>&nbsp;2007-12-10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<br><br>&nbsp;怎么实现上面的sql语句,望高手赐教,不胜感谢!
 
方案一:写个存储过程(循环)&nbsp;返回记录集<br>方案二:DateList,CountList:TList;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DateList&nbsp;用来存储日期(根据日期期限装载)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CountList用来存储个数(根据DateList循环调用&nbsp;GetCount&nbsp;)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这样只要写一个查询函数即可&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;GetCount(datestr:&nbsp;string);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;with&nbsp;ADOQuery&nbsp;do<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sql.text:='select&nbsp;count(*)&nbsp;as&nbsp;num&nbsp;from&nbsp;table&nbsp;where&nbsp;date&nbsp;like&nbsp;'+datestr+'%'<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;open;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.......(你自己完善&nbsp;我只写了个大概思路)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;
 
SELECT&nbsp;LEFT(date,&nbsp;10),&nbsp;COUNT(*)&nbsp;FROM&nbsp;lssj&nbsp;WHERE&nbsp;date&nbsp;&gt;&nbsp;'开始日期'&nbsp;AND&nbsp;date&nbsp;&lt;&nbsp;'结束日期'&nbsp;GROUP&nbsp;BY&nbsp;LEFT(date,&nbsp;10)&nbsp;ORDER&nbsp;BY&nbsp;LEFT(date,&nbsp;10)&nbsp;<br><br>注:如果你的&nbsp;date&nbsp;是&nbsp;datetime&nbsp;类型把&nbsp;LEFT(date,&nbsp;10)&nbsp;换成&nbsp;CONVERT(VARCHAR(10),&nbsp;date,&nbsp;120)&nbsp;就可以了。<br>&nbsp;&nbsp;&nbsp;&nbsp;注意结束日期必须天数加&nbsp;1&nbsp;!比如你想统计&nbsp;2007-12-01&nbsp;到&nbsp;2007-12-10&nbsp;之间那么开始日期就是&nbsp;2007-12-01&nbsp;结束日期就是&nbsp;2007-12-11&nbsp;,否则&nbsp;2007-12-10&nbsp;数据不会在统计范围内。
 
方法都不错啊,可惜只有100分,平均分了,别介意啊。
 
呵呵~~貌似偶的方法正统一点,效率高一点嘛。
 
declare&nbsp;@i&nbsp;int,@count&nbsp;int<br>&nbsp;&nbsp;declare&nbsp;@tmpdate&nbsp;datetime<br>&nbsp;&nbsp;declare&nbsp;@FData&nbsp;datetime<br>&nbsp;&nbsp;declare&nbsp;@Fdata1&nbsp;datetime<br>&nbsp;&nbsp;select&nbsp;@Fdata='2007-12-01',@Fdata1&nbsp;=&nbsp;'2007-12-10'<br>&nbsp;&nbsp;select&nbsp;@i&nbsp;=&nbsp;0,@count&nbsp;=0<br>&nbsp;&nbsp;set&nbsp;@tmpdate&nbsp;=&nbsp;@fdata<br>&nbsp;&nbsp;while&nbsp;@i&nbsp;&lt;&nbsp;@fdata1-@fdata&nbsp;+&nbsp;1&nbsp;<br>&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;set&nbsp;@count&nbsp;=&nbsp;(select&nbsp;Count(*)&nbsp;from&nbsp;cs&nbsp;where&nbsp;substring(cast(FData&nbsp;as&nbsp;varchar(20)),1,10)&nbsp;=&nbsp;@tmpdate)<br>&nbsp;&nbsp;&nbsp;&nbsp;insert&nbsp;into&nbsp;kk&nbsp;values(@tmpdate,@count)<br>&nbsp;&nbsp;&nbsp;&nbsp;set&nbsp;@tmpdate&nbsp;=&nbsp;@tmpdate&nbsp;+&nbsp;1<br>&nbsp;&nbsp;&nbsp;&nbsp;set&nbsp;@i&nbsp;=&nbsp;@i&nbsp;+&nbsp;1&nbsp;<br>&nbsp;&nbsp;end<br>&nbsp;select&nbsp;*&nbsp;from&nbsp;kk<br>delete&nbsp;kk
 
后退
顶部