У меня есть таблица вроде этого:Cross таблицы VB.NET и SQL Server & Linq
MAName feldtext
------------------
karl fieldtext1
karl fieldtext2
karl fieldtext1
karl fieldtext3
karl fieldtext4
karl fieldtext2
karl fieldtext5
karl fieldtext3
karl fieldtext3
susi fieldtext1
susi fieldtext4
john fieldtext2
john fieldtext5
john fieldtext5
и мне нужно:
MAName fieldtext1 fieldtext2 fieldtext3 fieldtext4 fieldtext5 FehlerJeMA
karl 2 2 3 1 1 9
susi 1 0 0 1 0 2
john 0 1 0 0 2 3
Столбцов fieldtext может пойти от fieldtext1 к fieldtextn, это динамическое , в зависимости от запроса.
Я искал здесь решений и нашел, поэтому мой подход:
Dim dt2 As New DataTable
Dim nn As Integer = 0
Dim Zeile As DataRow
dt2.Columns.Add("MAName")
' fieldtext distinct
Dim query2 = (From dr In (From d In newTable2.AsEnumerable Select New With {.feldtext1 = d("feldtext")}) Select dr.feldtext1 Distinct)
For Each Feldtext In query2
dt2.Columns.Add(Feldtext)
Next
column = New DataColumn()
column.DataType = System.Type.GetType("System.Int32")
column.ColumnName = "FehlerJeMA"
dt2.Columns.Add(column)
' MAName distinct
Dim query3 = (From dr In (From d In newTable2.AsEnumerable Select New With {.MAName2 = d("MAName")}) Select dr.MAName2.ToString.ToLower Distinct)
For Each Mitarbeiter In query3
Zeile = dt2.NewRow()
Zeile(0) = Mitarbeiter.ToString.ToLower
MA2 = Mitarbeiter.ToString.ToLower
nn = 1
For Each colName2 In query2
Fehler2 = colName2
Dim AnzahlFehler As String = (From row In newTable2.Rows Select row Where row("MAName").ToString.ToLower = MA2 And row("feldtext") = Fehler2).Count
If AnzahlFehler = 0 Then
AnzahlFehler = ""
End If
Zeile(nn) = AnzahlFehler
nn += 1
If AnzahlFehler <> "" Then
FehlerJeMA += CInt(AnzahlFehler)
End If
Next
Zeile(nn) = FehlerJeMA
dt2.Rows.Add(Zeile)
Next
Это работает, но очень медленно ...
Это может быть так, что в моей таблице имеет более 10.000 рядов ...
Так что мой вопрос: какой быстрый подход получить результат?
Это какой-то кросс-стол с linq? Другие подходы?
Какой версию SQL Server вы используете? – Alex
MSSQL Server 2014 – frank123
Если у вас большое количество строк в таблице, я бы рекомендовал использовать решение SQL Server. Вы можете использовать Google для «Динамического Pivot SQL Server». У SO уже есть несколько ответов: http://stackoverflow.com/questions/25443598/sql-server-dynamic-pivot и http://stackoverflow.com/questions/10404348/sql-server-dynamic-pivot-query – Alex