首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SQL中的Master-Detail查询

SQL中的Master-Detail查询
EN

Stack Overflow用户
提问于 2020-04-17 21:28:59
回答 2查看 66关注 0票数 0

我在查询我的数据时遇到了问题,因为我的预期结果是master-detail类型的输出。

我有一张桌子。在这个表中,我有三列,它们都是字符串:

版本

URL

应用程序

在此表中,我有以下数据:

代码语言:javascript
运行
复制
**Version**   **URL**                           **Application**
New           http://www.stackoverflow1.com     Application1
New           http://www.stackoverflow2.com     Application1
Old           http://www.stackoverflow3.com     Application2

预期的输出将是

代码语言:javascript
运行
复制
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导出到电子表格)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-18 16:28:09

您可能不需要编写任何代码。

使用报告向导-它将为您分组。

假设您在Access中有该表。只需点击表格(突出显示)即可。

然后从功能区创建-选择报表向导。

选择字段的顺序非常重要。

所以,应用程序,版本,URL。

按应用程序、版本分组。

选择"stepped“

报告将如下所示:

现在,你可以保存报告-

现在在设计模式下打开报表。现在从功能区-选择分组和排序。选择添加一个sum -但选择您的“新”列-它将提供一个计数,因为这是一个文本值。

你会得到这个:

然后,您可以将整个框向上移动到详细信息部分。

你会得到这个:

我想您可以考虑SQL group by,但是使用报表编写器进行排序和分组可以对数据行进行大量的分组和汇总。

您可以删除所有额外的标题和其他垃圾-一旦完成,然后您可以从功能区导出到excel。

票数 2
EN

Stack Overflow用户

发布于 2020-04-17 23:14:03

下面是一些VBA代码,它使用两个记录集,一个用于获取每个组的“标题”信息,另一个用于获取每个组的详细信息,并将其全部输出到Excel文件中:

代码语言:javascript
运行
复制
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

致以敬意,

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61272828

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档