我在查询我的数据时遇到了问题,因为我的预期结果是master-detail类型的输出。
我有一张桌子。在这个表中,我有三列,它们都是字符串:
版本
URL
应用程序
在此表中,我有以下数据:
**Version** **URL** **Application**
New http://www.stackoverflow1.com Application1
New http://www.stackoverflow2.com Application1
Old http://www.stackoverflow3.com Application2
预期的输出将是
New - Application 1 - (2)
http://www.stackoverflow1.com
http://www.stackoverflow2.com
Old - Application 2 - (1)
http://www.stackoverflow3.com
此表表示部署在公司网络上的应用程序的清单。一个应用程序可以存在于多个URL上,并且是两个版本中的一个,在本例中为“new”或“old”。我遇到问题的查询的目标是能够提供一个报告,其中版本,然后是应用程序,对URL进行分组,以便例如可以看到,我在这样或那样的URL上部署了应用程序“X”的“新”版本。此外,我还需要提供每个版本和应用程序分组的URL的数量/计数,例如,应用程序“X”的“新”版本出现了这么多次(这些数据最终将从SQL导出到电子表格)。
发布于 2020-04-18 16:28:09
您可能不需要编写任何代码。
使用报告向导-它将为您分组。
假设您在Access中有该表。只需点击表格(突出显示)即可。
然后从功能区创建-选择报表向导。
选择字段的顺序非常重要。
所以,应用程序,版本,URL。
按应用程序、版本分组。
选择"stepped“
报告将如下所示:
现在,你可以保存报告-
现在在设计模式下打开报表。现在从功能区-选择分组和排序。选择添加一个sum -但选择您的“新”列-它将提供一个计数,因为这是一个文本值。
你会得到这个:
然后,您可以将整个框向上移动到详细信息部分。
你会得到这个:
我想您可以考虑SQL group by,但是使用报表编写器进行排序和分组可以对数据行进行大量的分组和汇总。
您可以删除所有额外的标题和其他垃圾-一旦完成,然后您可以从功能区导出到excel。
发布于 2020-04-17 23:14:03
下面是一些VBA代码,它使用两个记录集,一个用于获取每个组的“标题”信息,另一个用于获取每个组的详细信息,并将其全部输出到Excel文件中:
Sub sExportAppData()
On Error GoTo E_Handle
Dim db As DAO.Database
Dim rsMaster As DAO.Recordset
Dim rsDetail As DAO.Recordset
Dim strSQL As String
Dim objXL As New Excel.Application
Dim objXLBook As Excel.Workbook
Dim objXLSheet As Excel.Worksheet
Dim strXLFile As String
Dim lngRow As Long
strXLFile = "J:\downloads\app-data.xlsx"
If Len(Dir(strXLFile)) > 0 Then Kill strXLFile
Set db = DBEngine(0)(0)
strSQL = "SELECT A.AppVersion, A.AppApplication, Count(A.AppApplication) AS AppFrequency " _
& " FROM tblApplication A " _
& " GROUP BY A.AppVersion, A.AppApplication " _
& " ORDER BY A.AppVersion ASC, A.AppApplication ASC;"
Set rsMaster = db.OpenRecordset(strSQL)
If Not (rsMaster.BOF And rsMaster.EOF) Then
Set objXLBook = objXL.Workbooks.Add
Set objXLSheet = objXLBook.Worksheets(1)
lngRow = 1
Do
objXLSheet.Cells(lngRow, 1) = rsMaster!AppVersion & " - " & rsMaster!AppApplication & " - (" & rsMaster!AppFrequency & ")"
lngRow = lngRow + 1
strSQL = "SELECT AppURL FROM tblApplication " _
& " WHERE AppVersion='" & rsMaster!AppVersion & "' AND AppApplication='" & rsMaster!AppApplication & "' " _
& " ORDER BY AppURL ASC;"
Set rsDetail = db.OpenRecordset(strSQL)
If Not (rsDetail.BOF And rsDetail.EOF) Then
Do
objXLSheet.Cells(lngRow, 1) = rsDetail!AppURL
lngRow = lngRow + 1
rsDetail.MoveNext
Loop Until rsDetail.EOF
End If
rsMaster.MoveNext
Loop Until rsMaster.EOF
objXLBook.SaveAs strXLFile
End If
sExit:
On Error Resume Next
rsDetail.Close
rsMaster.Close
Set rsDetail = Nothing
Set rsMaster = Nothing
Set objXLSheet = Nothing
objXLBook.Close
Set objXLBook = Nothing
objXL.Quit
Set objXL = Nothing
Exit Sub
E_Handle:
MsgBox Err.Description & vbCrLf & vbCrLf & "sExportAppData", vbOKOnly + vbCritical, "Error: " & Err.Number
Resume sExit
End Sub
致以敬意,
https://stackoverflow.com/questions/61272828
复制相似问题