私はこのようなテーブルを持って、それがダイナミッククロステーブルVB.NET&SQLサーバー&LINQの
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
fieldtextnするfieldtext1から行くことができfieldtext列です、クエリに応じて。
私は解決策をここに見ていると分かったので、私のアプローチ:
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で何らかのクロステーブルですか?他のアプローチ?
あなたの問題のためにそれを翻訳しようとすると、コードを使用することができますC#ので
SQL Serverのどのバージョンを使用していますか? – Alex
MSSQL Server 2014 – frank123
テーブルに多数の行がある場合は、SQL Serverソリューションを使用することをお勧めします。 Googleでは「SQL Serverの動的ピボット」を使用できます。だからすでにいくつかの答えがあります:http://stackoverflow.com/questions/25443598/sql-server-dynamic-pivot and http://stackoverflow.com/questions/10404348/sql-server-dynamic-pivot-query – Alex