ACCESS 怎么样在查询中满足一个条件而显示其余与之相应的字段信息
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ACCESS 怎么样在查询中满足一个条件而显示其余与之相应的字段信息相关的知识,希望对你有一定的参考价值。
数据库
查询结果:
注意,与14 和 价格最大相对应的供应商和时间的值都不正确
查询条件
没理解错的话,你是想找出同一尺寸中价格最大的供应商及时间吧?
看了你的查询设计,我知道你有些重要的概念没搞清楚。
1、你想通过分组,找出最大值,这可以,但又要通过简单的一步同时显示不分组的字段,这不行。
如果使用了分组,即在语句中使用了group by ,那么,查询列表中的每个列必须要么是分组依据列(在group by后面的列),要么是聚集函数或者包含聚集函数的表达式。
举个例子,假设一个表中有字段分别是a、b、c、d、e、f,如果以a、b为分组(即group by a,b),那么在select后面只能出现a,或者b,或者a,b,或者count()聚合函数 ,不能出现c,d,e,f(也不能是包含cdef的表达式),但可以是包含cdef的聚合函数(如sum(c),avg(d)等等),也可以是包含cdef聚合函数的表达式(如sum(e)*100,sum(f)+25等等)。
所以,你已经出现group by 尺寸,而你想在select后出现供应商、时间字段的值,这是行不通的。
2、解决的办法是分2步走,可按如下方法:
首先,建立一个汇总查询,如下
它会得出如下结果:
尺寸 价格
14 10001
12 8000
其次,再建立一个查询,要添加表1和前面建立的查询1,并建立关系,如下
只要直接运行查询2,它的结果,如下
这样就满足你的要求了。
3、若用SQL语句,可一次执行以上的查询,它的意思同上面的完全一样,代码如下
SELECT 尺寸,供应商,时间,价格 FROM 表1 INNER JOIN (SELECT 尺寸, max(价格) AS 价格之最大值 FROM 表1 GROUP BY 尺寸) AS abc ON (表1.价格=abc.价格之最大值) AND (表1.尺寸=abc.尺寸);
说明: (SELECT 尺寸, max(价格) AS 价格之最大值 FROM 表1 GROUP BY 尺寸)就是前面的查询1;abc是这个分组汇总查询的别名,设置别名目的是为了ON后面的句子引用。
参考技术A ACCESS汇总表里不可以在分组或运算字段下写条件,知道不重新建立一个查询,或者右键点在总计那一行上,不要他汇总,再右键点在查询设计器菜单上,选择SQL编辑器,把里面的语句全部删除,重新写:
Select * From 表1 Where 供应商=[请输入供应商名称!];
这样就可以了,你再打开查询,就弹出一个对话框提示你输入条件.在窗体上可以把表绑定在窗体上,条件直接指向窗体上某个Text控件,做个按钮去加载刷新他让他筛选,查询语句就应该这么写:
Select * From 表1 Where 供应商=Forms!窗体名!控件名称;
在VBA编辑器代码中也可以这么编写数据源.
Me.RecordSource="Select * From 表1 Where 供应商='"+控件名称+"'"
筛选查询窗体上的控件作为条件的数据 参考技术B 你有多个条件,想要满足其中一个条件,就把所有对应的记录都显示,那么在查询设计视图中,每个条件要放在不同行追问
烦劳请教,怎么样才能在查询设计视图中,每个条件要放在不同行,我不是已经把每个条件要放在不同行了吗? 请进一步解释,谢谢了
追答例如第一个字段“尺寸”在条件栏输入了12,第二个字段“供应商”的条件就要放在下一行,也就是“条件”行厦门岛“或”那一行。
不过刚才再仔细看了你的问题,可能我误会了题意。
你的设计视图中,“尺寸”选择“总计”是“Group By” ,也就是说这是以每个尺寸作为一个组,查询结果中的尺寸不是作为一条记录,而是作为分组号来出现的。后面你再分别取价格的最大值、供应商的最后一条记录、时间的最后一条记录,是从这一组里面去找的,所以你看到的结果就不是对应的了。按你这样的查询条件,不是查询的一条记录。除非你取消分组。
DataGridView怎么做条件查询啊
RT,我DataGridView绑定了一个Access数据库的一个只有名字性别的表,然后又做了一个combobox里面写的"男""女",还做了一个Button,我希望选择男或女之后按下Button,datagridview上只显示对应性别的结果
第一:改变DataGridView的绑定数据源,可以是datatable,也可以是dataset第二:在从数据库中查找出数据放入到datatable中或dataset中,sql语句如下select * from [表名] where [性别] = '查询条件' (这里查询条件由combobox中获得,男/女)第三:在button按钮按下后,执行sql查询语句,获得查询结果,放入datatable或dataset中然后:DataGridView.DataSource = [datatable];DataGridView.DataBind(); 参考技术A #region 返回一个DataTable类型的数据集
/// <summary>
/// 返回一个DataTable类型的数据集
/// </summary>
/// <param name="strsql">sql语句</param>
/// <param name="mydt">DataTable类型的对象</param>
public void getDataTable(string strsql,ref DataTable mydt)
SQL = "execSQL: " + strsql;
MySqlDataAdapter myDA = new MySqlDataAdapter(strsql, Connect);
try
Connect.Open();
myDA.Fill(mydt);
Connect.Close();
catch(System.Exception e)
//errorMsg = e.Message;
Connect.Close();
//showDBMsg(errorMsg + SQL);
finally
myDA.Dispose();
#endregion看我上面这个函数,参数一个是sql 语句,一个是datatable的引用你把sql语句和datatable这两个参数传进去就可以了,比如这样string sql1 = "select * from ......."DataTable dt1 = new DataTable(); getDataTable(sql1, ref dt1); 参考技术B easydatagridview绑定数据库?你的意思是用bindingsource绑定?如果是bindingsource绑定的,那最容易实现用filter Dim strtype As String
strtype = "列名"
Me.bindingsource1.Filter = strtype & " ='" & combobox.Text & "'" 不然就直接在datagridview里面去过滤删除。 If Me.txtSearch.Text <> "" Then For i As Integer = 0 To datagridview1.Rows.Count - 1
Dim strSearch, strColValue As String'搜索的内容由txtSearch(textbox)给出
strSearch = Me.txtSearch.Text'对应列名
strColValue = datagridview1.Rows(i).Cells("colName").Value.ToString
If strColValue.Contains(strSearch) Then'这里是标记符合条件的内容标注为红色,你改成删除代码,这个不需要再问了吧?
datagridview1.Rows(i).Cells("colName").Style.ForeColor = Color.Red
datagridview1.CurrentCell = dgvSupplier(1, i)
End If
Next
Else
Exit Sub
End If 上面两个我项目中的实例,修修改改肯定可以用 参考技术C 。。。。这个控件不是绑定数据源吗?
以上是关于ACCESS 怎么样在查询中满足一个条件而显示其余与之相应的字段信息的主要内容,如果未能解决你的问题,请参考以下文章