不确定是否可以这样做,但我正在尝试生成一个MySQL查询,该查询为我提供表中的每个列名以及与这些列关联的值,同时删除值的重复条目。 / p>
简而言之,我尝试使用数据库中的表中的列名作为节点来填充树视图控件。在每个节点下,我想列出每列中的所有非重复和非空条目作为子节点。基本上为我的应用程序创建一个类似控件的过滤器。
我正在尝试模拟Excel中的过滤器选项,用户可以勾选所有过滤器选项以包含/排除数据。
我尝试过构建查询,但只能在此阶段管理列名。我也尝试从我的数据集构建树视图控件,但只能填充节点,而不是子节点。
感谢任何帮助,因为我仍然在VB.net中学习SQL
答案 0 :(得分:1)
使用您的建议和帮助,我已设法将其转换为数据表并获得了预期的结果。谢谢你让我走上正轨。
这是我的最终结果。可能会在更整洁的代码中实现相同的结果,但这对我有用。再次感谢。
MySQLConn.Open()
Dim ColumnQry As New MySqlCommand("SELECT * FROM Stores WHERE 1=2", MySQLConn)
ColumnQry.CommandType = CommandType.Text
Dim da1 As New MySqlDataAdapter(ColumnQry)
dasColumns.Tables.Clear()
da1.Fill(dasColumns, "Columns")
Dim dt1 As DataTable = dasColumns.Tables("Columns")
For Each f As DataColumn In dt1.Columns
trvFilter.Nodes.Add(f.ColumnName, f.ColumnName)
Dim ValuesQry As New MySqlCommand("SELECT DISTINCT " & f.ColumnName & " FROM Stores ORDER BY " & f.ColumnName, MySQLConn)
ValuesQry.CommandType = CommandType.Text
Dim da2 As New MySqlDataAdapter(ValuesQry)
dasValues.Tables.Clear()
da2.Fill(dasValues, "Values")
Dim dt2 As DataTable = dasValues.Tables("Values")
For x = 0 To (dasValues.Tables("Values").Rows.Count - 1)
trvFilter.Nodes(f.ColumnName).Nodes.Add(dt2.Rows(x)(f.ColumnName).ToString)
Next
Next
MySQLConn.Close()
答案 1 :(得分:0)
我认为你不能用一个查询来做到这一点。一些伪代码......
'get empty recordset, just to get all the field names
query = "SELECT * FROM mytable WHERE 1=2"
rs = conn.open(query)
'loop over the fields and add them to the treeview while storing a reference
'of the created node in variable n
foreach f in rs.fields
set n = treeview.addnode(f.name)
'for the created node get the unique values occuring in that column
query = "SELECT DISTINCT " & f.name & " FROM mytable ORDER BY " & f.name
rs2 = conn.open(query)
'loop over the found values
while not rs2.EOF
'add each value to the treeview as a child of node n
treeview.addnode(rs2.fields(f.name), n)
rs2.MoveNext
loop
next f