使用 VBScript 循环遍历 SQL 数据库并对相似时间进行分组
Looping through SQL database using VBScript and grouping similar times
我需要遍历 SQL 服务器数据表并显示每条记录的一些信息。但是,我需要按每个 "event" 的相同开始时间对其进行分组。我想在一个循环命令中执行此操作,而不是每次都使用单独的循环命令。我知道这可能是我想念的简单事情。但我想不通。我想按开始时间对这些事件进行分组。我希望每个开始时间都有一个 H4 header 并显示该开始时间的所有事件,然后也使用 H4 标签移动到下一个开始时间。但是每组开始时间只有一个H4标签。这是我的代码:
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open
strSQL = "SELECT EventTitle, FinalStartTime, FinalEndTime, Organization, description FROM Meetings WHERE ApprovalStatus = 'Approved' ORDER BY FinalStartTime"
Set rstDisplay = Conn.Execute(strSQL)
i=0
While Not rstDisplay.EOF
i=i+1
strSecondStartTime = strStartTime
strStartTime = rstDisplay("FinalStartTime")
strEndTime = rstDisplay("FinalEndTime")
%>
<h4><%=strStartTime%>–<%=strEndTime%></h4>
<table class="prog-table" id="report<%=i%>">
<tr>
<td class="firsttd"><%=rstDisplay("EventTitle")%><span style="float:right; opacity:0.5; display:block; padding-left:50px;"><i class="fa fa-plus" aria-hidden="true"></i></span></td>
</tr>
<tr>
<td>
<p><strong>Presented by:</strong><BR>
<blockquote><%=rstDisplay("Organization")%></blockquote></p>
<p><%=rstDisplay("description")%></p>
</td>
</tr>
</table>
<%
rstDisplay.MoveNext
Wend
rstDisplay.Close
Conn.Close
%>
结果 HTML 应该是简化的:
9:00 上午 - 10:00 上午
事件 1
事件 2
上午 11:00 - 12:00 下午
事件 3
事件 4
下午 1:00 - 2:00 下午
事件 5
下午 3:00 - 4:00 下午
活动 6
事件 7
活动 8
目前我的结果 HTML 不正确,显示如下:
9:00 上午 - 10:00 上午
事件 1
9:00 上午 - 10:00 上午
事件 2
9:00 上午 - 10:00 上午
事件 3
等等等等
我会尝试让 SQL 语句本身进行分组,然后迭代结果行以更轻松地注入 HTML。像这样:
SELECT
CAST(M.FinalStartTime as varchar(50)) + ' - ' + CAST(M.FinalEndTime as varchar(50))
,
REPLACE(
REPLACE(
REPLACE(
(SELECT IM.EventTitle FROM Meetings IM WHERE IM.FinalStartTime = M.FinalStartTime AND IM.FinalEndTime = M.FinalEndTime AND IM.ApprovalStatus = 'Approved' For XML PATH (''))
, '</EventTitle><EventTitle>', ',')
, '<EventTitle>','')
, '</EventTitle>','')
FROM
Meetings M
WHERE
M.ApprovalStatus = 'Approved'
GROUP BY
M.FinalStartTime, M.FinalEndTime, CAST(M.FinalStartTime as varchar(50)) + ' - ' + CAST(M.FinalEndTime as varchar(50))
ORDER BY
M.FinalStartTime
这个 SQL 超出了我的想象,没有针对性能进行优化,但它可能会让您更轻松。只需用这个 SQL 替换你的 strSQL =。
只需跟踪您所在的组,并且仅在更改时显示 <h4>
。
G = ""
i = 0
Do Until rs.EOF
strStartTime = rs("FinalStartTime")
strEndTime = rs("FinalEndTime")
If G <> strStartTime & "–" & strEndTime Then
G = strStartTime & "–" & strEndTime
Response.Write "<h4>" & G & "</h4>"
End If
i = i + 1
%>
<table class="prog-table">(etc.)</table>
<%
rs.Movenext
Loop
(当然,这假设您的记录集按 header 字段排序 - 在您的例子中,开始时间和结束时间。)
我需要遍历 SQL 服务器数据表并显示每条记录的一些信息。但是,我需要按每个 "event" 的相同开始时间对其进行分组。我想在一个循环命令中执行此操作,而不是每次都使用单独的循环命令。我知道这可能是我想念的简单事情。但我想不通。我想按开始时间对这些事件进行分组。我希望每个开始时间都有一个 H4 header 并显示该开始时间的所有事件,然后也使用 H4 标签移动到下一个开始时间。但是每组开始时间只有一个H4标签。这是我的代码:
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open
strSQL = "SELECT EventTitle, FinalStartTime, FinalEndTime, Organization, description FROM Meetings WHERE ApprovalStatus = 'Approved' ORDER BY FinalStartTime"
Set rstDisplay = Conn.Execute(strSQL)
i=0
While Not rstDisplay.EOF
i=i+1
strSecondStartTime = strStartTime
strStartTime = rstDisplay("FinalStartTime")
strEndTime = rstDisplay("FinalEndTime")
%>
<h4><%=strStartTime%>–<%=strEndTime%></h4>
<table class="prog-table" id="report<%=i%>">
<tr>
<td class="firsttd"><%=rstDisplay("EventTitle")%><span style="float:right; opacity:0.5; display:block; padding-left:50px;"><i class="fa fa-plus" aria-hidden="true"></i></span></td>
</tr>
<tr>
<td>
<p><strong>Presented by:</strong><BR>
<blockquote><%=rstDisplay("Organization")%></blockquote></p>
<p><%=rstDisplay("description")%></p>
</td>
</tr>
</table>
<%
rstDisplay.MoveNext
Wend
rstDisplay.Close
Conn.Close
%>
结果 HTML 应该是简化的:
9:00 上午 - 10:00 上午
事件 1
事件 2
上午 11:00 - 12:00 下午
事件 3
事件 4
下午 1:00 - 2:00 下午
事件 5
下午 3:00 - 4:00 下午
活动 6
事件 7
活动 8
目前我的结果 HTML 不正确,显示如下:
9:00 上午 - 10:00 上午
事件 1
9:00 上午 - 10:00 上午
事件 2
9:00 上午 - 10:00 上午
事件 3
等等等等
我会尝试让 SQL 语句本身进行分组,然后迭代结果行以更轻松地注入 HTML。像这样:
SELECT
CAST(M.FinalStartTime as varchar(50)) + ' - ' + CAST(M.FinalEndTime as varchar(50))
,
REPLACE(
REPLACE(
REPLACE(
(SELECT IM.EventTitle FROM Meetings IM WHERE IM.FinalStartTime = M.FinalStartTime AND IM.FinalEndTime = M.FinalEndTime AND IM.ApprovalStatus = 'Approved' For XML PATH (''))
, '</EventTitle><EventTitle>', ',')
, '<EventTitle>','')
, '</EventTitle>','')
FROM
Meetings M
WHERE
M.ApprovalStatus = 'Approved'
GROUP BY
M.FinalStartTime, M.FinalEndTime, CAST(M.FinalStartTime as varchar(50)) + ' - ' + CAST(M.FinalEndTime as varchar(50))
ORDER BY
M.FinalStartTime
这个 SQL 超出了我的想象,没有针对性能进行优化,但它可能会让您更轻松。只需用这个 SQL 替换你的 strSQL =。
只需跟踪您所在的组,并且仅在更改时显示 <h4>
。
G = ""
i = 0
Do Until rs.EOF
strStartTime = rs("FinalStartTime")
strEndTime = rs("FinalEndTime")
If G <> strStartTime & "–" & strEndTime Then
G = strStartTime & "–" & strEndTime
Response.Write "<h4>" & G & "</h4>"
End If
i = i + 1
%>
<table class="prog-table">(etc.)</table>
<%
rs.Movenext
Loop
(当然,这假设您的记录集按 header 字段排序 - 在您的例子中,开始时间和结束时间。)