選択した人々の両方がその曲を知っていて、ステータスが完了しているときに、その曲名のリストを返すクエリがあります。
すべてのインストゥルメントが「N/A」に設定されていない場合、ステータスが完了している曲のみを表示する方法はありますか?
たとえば、テーブルの内容が次のようなものであるとします。
BandieName SongName 楽器のステータス ホリー ワイプアウト ベル コンプリート ホリー センテニアル N/A コンプリート シャーロット ワイプアウト シンボルの完成 シャーロット センテニアル N/A コンプリート
リストからHollyとCharlotteを選択してクエリを実行すると、 WipeoutとCentenialがリストされます。これらの曲はどちらもステータスが完了しているためです。ただし、その曲に選択されたすべての人が楽器をN/Aとして持っているため、 Centenialを表示したくありません。
コンテンツが以下のようなもので、そのうちの 3 つを選択した場合、その曲にリストされているすべての楽器がN/Aであるとは限らないため、3 つの曲すべてを表示したいと思います。
BandieName SongName 楽器のステータス ホリー ワイプアウト ベル コンプリート ホリー センテニアル N/A コンプリート シャーロット ワイプアウト シンボルの完成 シャーロット センテニアル N/A コンプリート ライアン ワイプアウト ドラム コンプリート ライアン センテニアル ドラム コンプリート
これまでの私のコードは次のとおりです。
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