关于group by的问题

kulcurwind 2009-08-31 01:08:53
sql数据库
用户表
字段:录入人员 录入日期
日期选择页面表单内sj1 sj2
现在要统计添加人员在sj1到sj2之间所添加的用户数量
输出添加人员 添加数

以下SQL语句输出了录入人员,和添加数,但没办法加上sj1到sj2这个条件,请高手帮忙!万分感谢

SELECT 录入人员,count(1) as 出现次数
FROM dbo.khb group by 录入人员
ORDER BY 出现次数 DESC
...全文
239 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
toury 2009-09-01
  • 打赏
  • 举报
回复
if a<>0 or a<>"" then c=formatnumber(b*100/a,2)'将出现次数转成百分比
--------->
if a<>0 and a<>"" then c=formatnumber(b*100/a,2)'将出现次数转成百分比
toury 2009-09-01
  • 打赏
  • 举报
回复
简单的一点功能被DW搞出一火车的垃圾代码来,看了就头大。
接收表单页面.asp:
-----------------------------------------------------------------

<html>
<head>
<title>统计详细 </title>
<link href="css.css" rel="stylesheet" type="text/css" />
</head>
<body>
<!--建立rs记录集-->
<%
Dim sdate,eate,conn,rs,totalnum,sql
sdate=request.form("sj1"): if sdate="" then sdate=date()
edate=request.form("sj2"): if edate="" then edate=date()

Set conn=Server.CreateObject("ADODB.Connection")
Set rs=Server.CreateObject("ADODB.Recordset")
conn.open MM_conn_STRING
if conn.state<>1 then response.write "连库错误": response.end

totalnum = 0
sql="SELECT 录入人员,count(录入人员) as 出现次数 FROM dbo.khb " _
&" WHERE 录入日期 BETWEEN '"&sj1&"' AND '"&sj2&"'" _
& "group by 录入人员 ORDER BY count(录入人员) DESC "
rs.open sql,conn,1,1

%>
<!--建立kh1记录集结束-->
<table width="100%" border="0" cellpadding="0" cellspacing="1" bgcolor="#CCCCCC">
<tr background="images/bj.gif" bgcolor="#FFFFFF" height="27">
<td colspan="4"><%=sdate%>到<%=edate%>客户量统计</td>
</tr>
<tr height="20" align="center" bgcolor="#FFFFFF">
<td width="15%"><strong>姓名</strong></td>
<td width="65%"><strong>客户统计</strong></td>
<td width="10%"><strong>百分比</strong></td>
<td width="10%"><strong>客户数</strong></td>
</tr>
<%do while not rs.eof%>
<tr bgcolor="#FFFFFF">
<%
a=(kh_total)'哪里来的?不知道
b=rs("出现次数 ")&""
if a<>0 or a<>"" then c=formatnumber(b*100/a,2)'将出现次数转成百分比
%>
<td height="20" align="center"><%=rs("录入人员")%></td>
<td>
<table width=" <%= c %>%" border="0" cellspacing="0" cellpadding="0">
<tr><td height="14" bgcolor="#0000CC"> </td></tr>
</table>
</td>
<td align="center"><%If c>=1 Then response.write c&"%" else response.write "0"&c&"%"%></td>
<td align="center"><%=rs("出现次数")&""%> </td>
</tr>
<%
rs.MoveNext()
loop
rs.close: set rs=nothing
conn.close: set conn=nothing
%>
</table>
</body>
</html>
kulcurwind 2009-09-01
  • 打赏
  • 举报
回复
不知道SQL是怎么搞的,我在表里面是datetime类型的,个人猜测应该是SQL的datetime的字符长度是8导致的吧?真的不明白.原来的1900-1-1是SQL的默认值.我把字段改成char,输出的时候也是这样转换一下就没事了.真搞不懂微软为何要搞那么复杂.
toury 2009-09-01
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 kulcurwind 的回复:]
非常谢谢您!已经好了.用dw做是觉得简单,其实靠DW实再不了,后来手写代码了.其实根源不在这,而是在SQL查询时间需要转换在int.要不然我怎么弄都查不到数据.上次的SQL2000的datetime全部变成1900-1-1也弄得我头都大.就是第一次帖出来的SQL语句 where部分改成where convert(varchar(10),录入日期,120)>='a' and convert(varchar(10),录入日期,120) <='b'  a=request("sj1") b=request("sj2")

另外上面的 "a=(kh_total)"其实(kh_total)就是前面建立kh记录集的总数,把a赋值为所有的客户量,以便计算百分比.

[/Quote]
原来这样。[录入日期]为什么不用日期类型呢?
kulcurwind 2009-09-01
  • 打赏
  • 举报
回复
if a <>0 or a <>"" then c=formatnumber(b*100/a,2)'将出现次数转成百分比
--------->
if a <>0 and a <>"" then c=formatnumber(b*100/a,2)'将出现次数转成百分比


这里的a不会等于0,也不会等于空.因为我后来在前面做了一个判断,如果查询的数据小于1则alert("数据为空,无法统计.");window.open("..")到时间选择的页面去了.
kulcurwind 2009-09-01
  • 打赏
  • 举报
回复
非常谢谢您!已经好了.用dw做是觉得简单,其实靠DW实再不了,后来手写代码了.其实根源不在这,而是在SQL查询时间需要转换在int.要不然我怎么弄都查不到数据.上次的SQL2000的datetime全部变成1900-1-1也弄得我头都大.就是第一次帖出来的SQL语句 where部分改成where convert(varchar(10),录入日期,120)>='a' and convert(varchar(10),录入日期,120)<='b' a=request("sj1") b=request("sj2")

另外上面的 "a=(kh_total)"其实(kh_total)就是前面建立kh记录集的总数,把a赋值为所有的客户量,以便计算百分比.
kulcurwind 2009-08-31
  • 打赏
  • 举报
回复
其实以上代码中的kh记录集都没有办法查询到数据,但SQL2000中明明是有数据的.
kulcurwind 2009-08-31
  • 打赏
  • 举报
回复
用dw8做的
kulcurwind 2009-08-31
  • 打赏
  • 举报
回复
我把部分代码贴出来吧
选择时间的页面from
<form action="sbtj.asp" method="post" name="sjxz" target="right" id="sjxz">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td height="28" bgcolor="#FFFFCC"><label>
起始日期:
<input name="sj1" type="text" id="sj1" onclick="setday(this)" value="<%=date()-30%>" size="16" />

结束日期:
<input name="sj2" type="text" id="sj2" onclick="setday(this)" value="<%=date()%>" size="16" />
<select name="lx" id="lx">
<option value="跟单">跟单</option>
<option value="订单">订单</option>
<option value="客户量">客户量</option>
</select>
<input type="submit" name="Submit" value="提交" />
<a href="ztyhtj.asp">整体查看</a> td>
</tr>
</table>
</form>


接收表单页面
<html>
<head>
<title>统计详细</title>
<link href="css.css" rel="stylesheet" type="text/css" />
<!--建立kh记录集-->
<%
Dim kh__a
kh__a = "1"
If (request("sj1") <> "") Then
kh__a = request("sj1")
End If
%>
<%
Dim kh__b
kh__b = "2"
If (request("sj2") <> "") Then
kh__b = request("sj2")
End If
%>
<%
Dim kh
Dim kh_numRows

Set kh = Server.CreateObject("ADODB.Recordset")
kh.ActiveConnection = MM_conn_STRING
kh.Source = "SELECT * FROM dbo.khb WHERE 录入日期 between " + Replace(kh__a, "'", "''") + " and " + Replace(kh__b, "'", "''") + ""
kh.CursorType = 0
kh.CursorLocation = 2
kh.LockType = 1
kh.Open()

kh_numRows = 0
%>
<!--建立kh记录集结束-->
<!--建立kh1记录集-->
<%
Dim kh1__a
kh1__a = "1"
If (request("sj1") <> "") Then
kh1__a = request("sj1")
End If
%>
<%
Dim kh1__b
kh1__b = "2"
If (request("sj2") <> "") Then
kh1__b = request("sj2")
End If
%>
<%
Dim kh1
Dim kh1_numRows

Set kh1 = Server.CreateObject("ADODB.Recordset")
kh1.ActiveConnection = MM_conn_STRING
kh1.Source = "SELECT 录入人员,count(录入人员) as 出现次数 FROM dbo.khb WHERE 录入日期 between " + Replace(kh1__a, "'", "''") + " and " + Replace(kh1__b, "'", "''") + " group by 录入人员 ORDER BY 出现次数 DESC"kh1.CursorType = 0
kh1.CursorLocation = 2
kh1.LockType = 1
kh1.Open()

kh1_numRows = 0
%>
<!--建立kh1记录集结束-->
</head>
<body>
<table width="100%" border="0" cellpadding="0" cellspacing="1" bgcolor="#CCCCCC">
<tr>
<td height="27" colspan="4" background="images/bj.gif" bgcolor="#FFFFFF"><%= request("sj1") %>到<%= request("sj2") %>客户量统计</td>
</tr>
<tr>
<td width="15%" height="20" align="center" bgcolor="#FFFFFF"><strong>姓名</strong></td>
<td width="65%" align="center" bgcolor="#FFFFFF"><strong>客户统计</strong></td>
<td width="10%" align="center" bgcolor="#FFFFFF"><strong>百分比</strong></td>
<td width="10%" align="center" bgcolor="#FFFFFF"><strong>客户数</strong></td>
</tr>
<%
Dim Repeat1__numRows
Dim Repeat1__index

Repeat1__numRows = -1
Repeat1__index = 0
kh1_numRows = tj_numRows + Repeat1__numRows
'重复kh1记录集%>
<%
While ((Repeat1__numRows <> 0) AND (NOT kh1.EOF))
%>
<tr><% a=(kh_total)
b=(kh1.Fields.Item("出现次数").Value)
c=formatnumber(b*100/a,2)
'将出现次数转成百分比
%>

<td height="20" align="center" bgcolor="#FFFFFF"><%=(kh1.Fields.Item("录入人员").Value)%></td>
<td bgcolor="#FFFFFF"><table width="<%= c %>%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td height="14" bgcolor="#0000CC"></td>
</tr>
</table></td>
<td align="center" bgcolor="#FFFFFF"><% If c>=1 Then %>
<%=c %>%
<% Else %>0<%= c %>%<% End If %></td>
<td align="center" bgcolor="#FFFFFF"><%=(kh1.Fields.Item("出现次数").Value)%></td>
</tr>
<%
Repeat1__index=Repeat1__index+1
Repeat1__numRows=Repeat1__numRows-1
kh1.MoveNext()
Wend
'重复kh1记录集结束%>
</table>
</body>
</html>
<%
kh.Close()
Set kh = Nothing
%>

<%
kh1.Close()
Set kh1 = Nothing
%>

toury 2009-08-31
  • 打赏
  • 举报
回复
sql="SELECT 录入人员,count(录入人员) as 出现次数 FROM dbo.khb " _
&" WHERE 录入日期 BETWEEN '"&sj1&"' AND '"&sj2&"'" _
& "group by 录入人员 ORDER BY count(录入人员) DESC "

这样试一下
toury 2009-08-31
  • 打赏
  • 举报
回复
sql="SELECT 录入人员,count(录入人员) as 出现次数 FROM dbo.khb " _
&" WHERE 录入日期 BETWEEN '"&sj1&"' AND '"&sj2&"'" _
& "group by 录入人员 ORDER BY 出现次数 DESC "
kulcurwind 2009-08-31
  • 打赏
  • 举报
回复
呵呵,这个我原来就想到了也试过了.我用的是SQL2000 这段代码怎么都没办法查出数据,刚刚又去检查了一遍,好像是SQL2000的问题,因为我直接输入数据库中存在的数据时间,比如今天2009-08-31或2009-8-31都显示无数据,为此我还特意在表中增加了一条今天的数据,也提示无数据!晕了!
凡夫与俗子 2009-08-31
  • 打赏
  • 举报
回复
额。。好不容易碰到个会的,被老理抢了。。哈哈
toury 2009-08-31
  • 打赏
  • 举报
回复
sql="SELECT 录入人员,count(1) as 出现次数 FROM dbo.khb " _
&" WHERE 录入日期 BETWEEN '"&sj1&"' AND '"&sj2&"'" _
& "group by 录入人员 ORDER BY 出现次数 DESC "
MR丶CHAN 2009-08-31
  • 打赏
  • 举报
回复
那老衲就抢在toruy前面找啦,O(∩_∩)O

28,406

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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