我有一个返回所选歌曲的人的名单时,他们都知道这首歌,状态为完成查询。选择查询,需要额外的where子句?
有没有办法,只显示歌曲在状态完成后,当所有的仪器都放不为“N/A”?
例如,假设该表内容如下之一。
BandieName SongName Instrument Status Holly Wipeout Bells Complete Holly Centenial N/A Complete Charlotte Wipeout Symbols Complete Charlotte Centenial N/A Complete
,如果我从列表中选择冬青和夏洛特,并运行该查询,它会列出不经意的和森田,因为它们都具有这些歌曲作为状态的完整;不过,我不希望它显示森田因为所有这首歌所选择的人有文书N/A。
如果内容如下,并且我选择了其中的三个,我希望它显示所有三首歌曲,因为并非所有列出的歌曲都是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
我的代码到目前为止是以下一个。
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
因此,让我澄清你的目标:你想要歌曲名称连接到所有选定的BandieNames,都已完成状态,并且至少有一个选择了一些乐器(不是N/A)? – 2012-04-11 13:03:18
就是这样,此刻我可以获得连接到所有选定的Bandienames的状态完成的歌曲名称,但希望这些歌曲名称的状态是完整的,并且至少有一个乐器不是N/A 谢谢 – Sophie 2012-04-11 13:09:09
你使用的是什么RDBMS? – GarethD 2012-04-11 13:48:53