Динамическая сводная таблица в DatagridView - PullRequest
0 голосов
/ 10 июня 2019

У меня есть проект на VB.net, в котором в качестве базы данных используется сервер SQL. Имя таблицы Variation и имеет столбцы

JobNo
VariationNo
VariationRef
Сумма
Я не знаю, сколько вариантов придет для конкретного JobNo. Мне нужно конвертировать это

  JobNo   |  VariationNo  |  VariationRef  |  Amount
  1000    |      1        |      ABC       |  10 
  1000    |      2        |      ABD       |  15
  1100    |      1        |      ABE       |  50 
  1100    |      2        |      ABF       |  55 
  1100    |      3        |      ABG       |  60 

в это

  JobNo   |  V-1  |   V-2  |   V-3  etc.. to the last number
  1000    |   10  |    15  |    0       
  1100    |   50  |    55  |    60

и показать его в datagridview Так какой должна быть моя строка (SQLString)?
Мой код выглядит следующим образом

Dim con As New SqlConnection("Server=SREE-PC\SQLEXPRESS04;Database=project;Integrated security=true")  
Dim SQLString As String =???  
Dim cmd As New SqlCommand(SQLString, con)  
    Dim adapter As New SqlDataAdapter(cmd)  
    Dim table As New DataTable  
    adapter.Fill(table)  
    DataGridView1.DataSource = table  

1 Ответ

0 голосов
/ 14 июня 2019

Я получаю желаемый результат с помощью следующего кода. Мистер Эндрю Мортон помог мне в соединении строк. Но я чувствую, что мое решение немного длинное, особенно в начале. Любое предложение?

        Dim SQLString1 As String = "Select STRING_AGG([VariationNo],',')Intcolumn from (select distinct variationNo from variation)tmp"
        Dim cmd1 As New SqlCommand(SQLString1, con)
        Dim adapter1 As New SqlDataAdapter(cmd1)
        Dim table1 As New DataTable
        adapter1.Fill(table1)
        Dim tmplst As String = table1.Rows(0).Item("IntColumn").ToString
        Dim clmName As String = "[" & tmplst.Replace(",", "],[") & "]"
        Dim addvar As String = " as [Variation-" & tmplst.Replace(",", "]/ as [Variation-") & "]"
        Dim tmpclmname As String = "IsNull(" & clmName.Replace(",", ",0)/IsNull(") & ",0)"
        Dim joined = tmpclmname.Split({"/"c}).Zip(addvar.Split({"/"c}), Function(x, y) x & y).ToList()
        Dim tmpclmname1 = String.Join(", ", joined)
        Dim clmName1 As String = tmpclmname1.Replace("/", ",")
 Dim SQLString As String = "Select JobNo," & clmName1 & "
                                   from (Select JobNo,VariationNo,Amount from variation) as pivotdata     
                                   pivot 
                                   (
                                        Max(Amount)
                                        For VariationNo
                                        In (" & clmName & ")                                                         
                                   )AS Pivoting"
Dim cmd As New SqlCommand(SQLString, con)
        Dim adapter As New SqlDataAdapter(cmd)
        Dim table As New DataTable
        adapter.Fill(table)
        DataGridView1.DataSource = table

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...