#sql-server #vb.net #charts
#sql-сервер #vb.net #Диаграммы
Вопрос:
Я пытаюсь построить круговую диаграмму с данными, предоставленными из таблицы SQL. Результат моего запроса выглядит следующим образом:
Total A B C D E F
11005 0 1485 3667 2665 2579 609
Проблема в том, что у меня есть много «рядов», которые содержат только по одному данным для каждого. Я думаю, что мне нужно создать только одну «серию», чтобы иметь возможность отображать круговую диаграмму.
Мой код:
Dim RequeteByTpe As String = "SELECT COUNT(*) as Total,
Sum(CASE
WHEN [Type] = 'A' THEN 1
ELSE 0
END) A,
Sum(CASE
WHEN [Type] = 'B' THEN 1
ELSE 0
END) B,
Sum(CASE
WHEN [Type] = 'C' THEN 1
ELSE 0
END) C,
Sum(CASE
WHEN [Type] = 'D' THEN 1
ELSE 0
END) D,
Sum(CASE
WHEN [Constructeur] = 'E' THEN 1
ELSE 0
END) E,
Sum(CASE
WHEN [Constructeur] = 'F' THEN 1
ELSE 0
END) F
From DBase.dbo.MyTable"
Dim DA As New SqlDataAdapter(RequeteByType, ConnexionMyBase)
Dim DS As New DataSet()
DAConstC.Fill(DS, "ByType")
Dim ChartType As New Chart
Dim ChartArea2 As New ChartArea()
ChartConstC.ChartAreas.Add("ChartArea2")
ChartConstC.ChartAreas(0).Area3DStyle.Enable3D = True
Dim Series21 As Series = New Series("A")
Dim Series22 As Series = New Series("B")
Dim Series23 As Series = New Series("C")
Dim Series24 As Series = New Series("D")
Dim Series25 As Series = New Series("E")
Dim Series26 As Series = New Series("F")
Series21.ChartArea = "ChartArea2"
Series22.ChartArea = "ChartArea2"
Series23.ChartArea = "ChartArea2"
Series24.ChartArea = "ChartArea2"
Series25.ChartArea = "ChartArea2"
Series26.ChartArea = "ChartArea2"
ChartByType.DataSource = DS.Tables("ByType")
ChartByType.Series.Add(Series21)
ChartByType.Series.Add(Series22)
ChartByType.Series.Add(Series23)
ChartByType.Series.Add(Series24)
ChartByType.Series.Add(Series25)
ChartByType.Series.Add(Series26)
ChartByType.Series(0).YValueMembers = "A"
ChartByType.Series(1).YValueMembers = "B"
ChartByType.Series(2).YValueMembers = "C"
ChartByType.Series(3).YValueMembers = "D"
ChartByType.Series(4).YValueMembers = "E"
ChartByType.Series(4).YValueMembers = "F"
ChartByType.Titles.Add("Type proportions")
ChartByType.Titles(0).Font = New Font("Arial", 12, FontStyle.Regular)
ChartByType.Titles(0).Alignment = System.Drawing.ContentAlignment.TopCenter
ChartByType.Location = New System.Drawing.Point(15, 45)
ChartByType.Size = New System.Drawing.Size(760, 260)
Me.Controls.Add(ChartByType)
Я не знаю, должен ли я изменить свой sql-запрос, чтобы получить данные другого типа, или если есть возможность исправить это с помощью какого-либо метода атрибуции данных или другого. Кто-нибудь может помочь?
Комментарии:
1. Какой результат вы получаете, и какой результат вы хотите получить вместо этого?
2. @TabAlleman, в настоящее время я могу отображать только столбчатую диаграмму, и я хочу отобразить круговую диаграмму с пропорциями значений A, B, C, D, E, F.
Ответ №1:
вместо столбцов вам нужны строки…
вместо того, чтобы помещать A, B, C в их собственный столбец,
суммируйте каждый по строке
пример sql…
select [Type], count(*) as Total From DBase.dbo.MyTable group by [Type]
я заметил, что в заявлении есть две колонки case
,
при необходимости вы можете объединить union
результаты вместе…
select [Type] as Label, count(*) as Total From DBase.dbo.MyTable group by [Type]
union all
select [Constructeur] as Label, count(*) as Total From DBase.dbo.MyTable group by [Constructeur]