如何使用具有相同值的多个 sql 列创建 RDLC 报告以计入 vb.net

how to create RDLC report using multiple sql columns with same values to count in vb.net

基本上我正在创建 vb.net window 应用程序 可以在 中显示结果rdlc 报告...

后端是SQL server 2008.

有什么简单的方法可以根据行和列分组来填充 RDLC tablix。

情况如下

我在 SQL 服务器中有一个 table 这样的

**Course       Adcat      sub1          sub2          sub3         sub4        sub5**

Ba1           Reg        HL           Hlit          His          PS          Env

Ba1           Reg        EL           Hlit          HS          Socio        Env

Ba1           Pri        HL           His           Hlit         HS          Env

Ba1           Reg        SL           Socio         Slit         PS          Env

这就像不同课程的学生在不同的类别中注册并选择不同的科目一样,它存储在如上所示的五列中。

我只想在 RDLC 中看到这样的报告

    **Course        subject        Reg                          Pri**          

      BA1            HL           1                              1

                     EL           1                              0

                     SL           1                              0

                     Hlit         2                              1

                     His          1                              2

                     PS           1                              1

                     HS           1                              0

                     Socio        2                              0

所以没有。

我只想统计上面提到的五列中的科目数量。

请帮帮我

我正在使用 VB.NET window 应用程序和 Sql 服务器 2008。 提前致谢。

感谢您的回复.. 我创建了一个 sql 查询并将其保存为视图中的小计。 现在如何使用按钮单击从我的 vb.net 应用程序中调用它。 我使用的代码是:

Public Sub Show_SubjectSummary()
        sqlQRY = "SELECT * FROM tblstudetail where" _
             & "[session] = '2015' AND" _
             & "[course] = 'B.A. I' AND" _
            & "[ADstatus] LIKE 'OK'"
        ds = New DataSet
        da = New SqlDataAdapter(sqlQRY, Conn)
        da.Fill(ds, "tblstudetail")
        RDLCreportview.ReportViewer1.LocalReport.ReportEmbeddedResource = Application.StartupPath & "\Report\SubjectSummary.rdlc"
        sReportDataSource.Name = "DataSet1"
        sReportDataSource.Value = ds.Tables(0)
        RDLCreportview.ReportViewer1.LocalReport.ReportPath = Application.StartupPath & "\Report\SubjectSummary.rdlc"
        RDLCreportview.ReportViewer1.SetDisplayMode(DisplayMode.PrintLayout)
        RDLCreportview.ReportViewer1.RefreshReport()
        ds.Dispose()
        ds = Nothing
        RDLCreportview.ShowDialog()
        RDLCreportview.Dispose()
        Conn.Close()
    End Sub

据我所知,由于最终 table 的复杂性,这是不可能的。我在您的情况下看到了一种解决方案。您需要更改查询。您无需直接使用 table,而是需要修改查询以提供所需的内容,然后填充到报告中。这是我要写的 (TESTED):

CREATE TABLE #tempSO
(
    course varchar(10),
    adcat varchar(10),
    sub1 varchar(10),
    sub2 varchar(10),
    sub3 varchar(10)
)

INSERT INTO #tempSO VALUES ('Ba1', 'Reg', 'HL','Hlit', 'His')
INSERT INTO #tempSO VALUES ('Ba1', 'Reg', 'EL','Hlit', 'HS')
INSERT INTO #tempSO VALUES ('Ba1', 'Pri', 'HL','His', 'Hlit')
INSERT INTO #tempSO VALUES ('Ba1', 'Reg', 'SL','Socio', 'Slit')

SELECT course, sub, 
       sum([Reg]) AS Reg, sum([Pri]) AS Pri

FROM (
    SELECT course, sub1 AS sub, adcat
    FROM #tempSO

    UNION ALL

    SELECT course, sub2 AS sub, adcat
    FROM #tempSO

    UNION ALL

    SELECT course, sub3 AS sub, adcat
    FROM #tempSO
) SourceTable
PIVOT
(
    COUNT(adcat) for adcat IN ([Reg], [Pri])
) PivotTable
GROUP BY course, sub

您还可以使用上述查询在数据库中创建视图。然后在报告中调用该视图而不是原来的 table。在这种情况下,您可以根据需要在不同的报告中重复使用该视图。

更新(根据您的更新):

下面是您的 sqlQry 变量现在的样子:

 sqlQRY = "SELECT course, sub, sum([Reg]) AS Reg, sum([Pri]) AS Pri FROM( " _
        & "SELECT course, sub1 AS sub, adcat FROM tblstudetail UNION ALL " _
        & "SELECT course, sub2 AS sub, adcat FROM tblstudetail UNION ALL " _
        & "SELECT course, sub3 AS sub, adcat FROM tblstudetail) SourceTable " _
        & "PIVOT (COUNT(adcat) for adcat IN ([Reg], [Pri])) PivotTable GROUP BY course, sub " _
        & "where [session] = '2015' " _
        & "AND [course] = 'B.A. I' " _
        & "AND [ADstatus] LIKE 'OK'"