Ich habe eine Abfrage, die eine Liste der Songnamen für die ausgewählten Personen zurückgibt, wenn beide wissen, dass der Song und der Status abgeschlossen ist.Abfrage auswählen, zusätzliche where-Klausel benötigen?
Gibt es eine Möglichkeit, nur die Songs anzuzeigen, bei denen der Status komplett ist, wenn alle Instrumente nicht als 'N/A' eingestellt sind?
Angenommen, der Tabelleninhalt ist der folgende.
BandieName SongName Instrument Status Holly Wipeout Bells Complete Holly Centenial N/A Complete Charlotte Wipeout Symbols Complete Charlotte Centenial N/A Complete
wenn ich Holly und Charlotte aus der Liste auswählen, und die Abfrage ausführen, wird es Liste Wipeout und Centenial, da sie beide haben diese Lieder als Status abgeschlossen; aber ich möchte nicht, dass es Centenial zeigt, weil alle ausgewählten Leute für dieses Lied Instrument wie N/A haben.
Wenn der Inhalt wie folgt war, und ich wählte die drei von ihnen, würde ich wollen, dass es alle drei Songs zeigt, da nicht alle Instrumente für dieses Lied aufgeführt sind N/A.
BandieName SongName Instrument Status Holly Wipeout Bells Complete Holly Centenial N/A Complete Charlotte Wipeout Symbols Complete Charlotte Centenial N/A Complete Ryan Wipeout Drum Complete Ryan Centenial Drum Complete
Mein Code ist bisher der folgende.
Protected Sub btnGetPlaylist_Click(sender As Object, e As System.EventArgs) Handles btnGetPlaylist.Click
Dim conn As SqlConnection = Nothing
Try
Dim connString As String = "Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\BandDatabase.mdf;Integrated Security=True;User Instance=True"
conn = New SqlConnection(connString)
Dim sqlBandies As String
Dim item As ListItem
For Each item In ListBoxBandies.Items
If item.Selected Then
Dim selectedBandies As String = item.Text
sqlBandies &= "'" & item.Text & "', "
End If
Next
Dim amountSelected As String = ListBoxBandies.Items.Count.ToString
Dim query As String = "select SongName from Learning where BandieName in (" + sqlBandies + " '') AND Status = 'Complete' group by SongName having count(distinct BandieName) = " + ListBoxBandies.GetSelectedIndices.Length.ToString
Dim cmd As SqlCommand = New SqlCommand(query, conn)
conn.Open()
Dim dr As SqlDataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection)
Dim dt As DataTable = New DataTable()
dt.Load(dr)
GridViewPlaylist.DataSource = dt
GridViewPlaylist.DataBind()
Finally
conn.Close()
End Try
End Sub
Also lassen Sie mich Ihr Ziel klarstellen: Sie wollen Songnamen, die mit ALLEN ausgewählten BandieNames verbunden sind, alle haben den Status abgeschlossen und AT MINDS ONE hat ein Instrument (nicht N/A) ausgewählt? –
Ja, das ist es, im Moment kann ich die Songnamen mit allen ausgewählten Bandenamen verbinden, wo der Status komplett ist, aber die Songnamen wollen, wo der Status komplett ist und mindestens eins der Instrumente ist nicht N/A Danke – Sophie
Welche RDBMS verwenden Sie? – GarethD