【问题标题】:Create a pie chart that will count multiple columns sql vb.net创建一个将计算多列sql vb.net的饼图
【发布时间】:2018-05-25 18:38:19
【问题描述】:

所以我正在创建一个饼图来计算一列中的项目数,问题是它也计算空项目,我可以使查询不只计算一列上的空值,它什么也不显示我让它不计算超过 1 列的空值。而当一行在多个列上都有值时,例如第 1 行在违反 1 和违反 2 上有值,饼图中会有一部分将它们都计为新值。

这是我的代码 -

    Dim cnn3 As New SqlConnection
    Dim cmd3 As New SqlCommand
    Dim dr As SqlDataReader
    Try
        cnn3.ConnectionString = Login.sqlcode
        cmd3.Connection = cnn3
        Dim tblFields As String = "SELECT count(*) as [Vio] from Violations WHERE Violation1<> '" & "NULL" & "' Group by Violation1, Violation2, Violation3, Violation4, Violation5, Violation6, Violation7, Violation8"
        Dim oData As New SqlDataAdapter(tblFields, cnn3)
        Dim ds As New DataSet
        Dim oCmd As New SqlCommand(tblFields, cnn3)
        cnn3.Open()
        oData.Fill(ds, "Violations")
        cnn3.Close()
        Chart1.DataSource = ds.Tables("Violations")
        Dim Series1 As Series = Chart1.Series("Series1")
        Series1.Name = "Violations"
        Chart1.Series(Series1.Name).YValueMembers = "Vio"
        Chart1.Size = New System.Drawing.Size(780, 350)
    Catch ex As Exception
        MessageBox.Show("Error while connecting to SQL Server." & ex.Message)
    End Try

我认为问题出在查询中,我试图在这里实现的是饼图显示列违规1-8 的计数,没有空值并且没有组合值。

【问题讨论】:

  • 您想要一个值,还是每个特定的列都计数?一个简单的SELECT Count(Violation1), Count(Violation2) ... Count(Violation7) FROM Violations 应该忽略每一列中的任何空值。
  • @CharlesMay 谢谢你的回复,但是我如何在饼图中显示这个,因为我的查询有“as [Vio]”,而且我在图表系列中调用来创建图表,但是根据您的查询,我不知道该怎么做。
  • 您需要根据要显示的内容进行更改。我假设您想要一个表示 Violation1、Violation2 等总数的饼图...Why not SELECT Count(Violation1) AS Violation1...?然后,这将显示您的图例中馅饼的每个“切片”所代表的内容。

标签: sql vb.net pie-chart


【解决方案1】:

这是我所描述内容的快速检查。

假设表包含以下信息:

通过运行查询:

SELECT Count(Violation1) AS Violation1,
       Count(Violation2) AS Violation2,
       Count(Violation3) AS Violation3,
       Count(Violation4) AS Violation4,
       Count(Violation5) AS Violation5
FROM Violations

我们最终得到以下结果:

将这些结果放入数据集后,可以很容易地显示图表。

在这里,我们使用从查询结果中填充的数据集填充图表。

    Chart1.Series.Clear()
    Chart1.Series.Add("Series1")
    'we only have one row so we only need to loop through the columns
    'of our row (Rows(0))  
    For Each c As DataColumn In ds.Tables(0).Columns
        Chart1.Series(0).Points.AddXY(c.ColumnName, ds.Tables(0).Rows(0).Item(c.ColumnName).ToString)
    Next
    Chart1.Series(0).ChartType = DataVisualization.Charting.SeriesChartType.Pie
    Chart1.Series(0).IsValueShownAsLabel = True 'show the value of each "slice"

给我们留下下图:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-08
    • 1970-01-01
    • 2020-02-27
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多