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

时间:2015-02-05 12:29:56

标签: sql-server-2008 rdlc vb.net-2010

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

在后端它是 SQL server 2008。

是否有任何简单的方法可以根据行和列分组填充RDLC Tablix。

情况如下。

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

**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窗口应用程序和Sql server 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

1 个答案:

答案 0 :(得分:0)

据我记忆,由于决赛桌的复杂性,这是不可能的。在你的情况下我看到了一个解决方案您需要更改查询。您不需要直接使用表,而是需要修改查询以满足您的需要,然后填入报表。我就是这样编写的(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

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

更新(根据您的更新):

以下是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'"