Sql 访问VBA:仅选择多个值
比如说,我有一张这样的桌子:Sql 访问VBA:仅选择多个值,sql,vba,ms-access,Sql,Vba,Ms Access,比如说,我有一张这样的桌子: ID | PNo | MM | CP | ---|-----|------|----| 1 | 13 | True | 4 | 2 | 92 | True | 3 | 3 | 1 | True | 3 | 4 | 13 | False| 2 | 5 | 13 | True | 3 | 6 | 1 | True | 3 | 我希望遍历所有PNo,并将所有行与该PNo进行比较,只选择字段MM中具有不同值的行 我的计划是创建一
ID | PNo | MM | CP |
---|-----|------|----|
1 | 13 | True | 4 |
2 | 92 | True | 3 |
3 | 1 | True | 3 |
4 | 13 | False| 2 |
5 | 13 | True | 3 |
6 | 1 | True | 3 |
我希望遍历所有PNo,并将所有行与该PNo进行比较,只选择字段MM中具有不同值的行
我的计划是创建一个具有不同PNo值的表,使用常规记录集迭代该表,并为每个PNo编写一个SQL查询。
现在我的问题是SQL查询的构造
我可以选择Table.PNo=rs(“PNo”)中的所有行,但我不知道如何制定查询以捕获具有不同值的行。以下内容应满足您的要求:
SELECT * FROM MyTable WHERE PNo in
(SELECT t.PNo FROM MyTable t
INNER join MyTable f
ON t.PNo = f.PNo
WHERE t.MM = true and f.MM = false)
内部连接确保只包括同时具有MM false和MM true的PNO。我认为这应该有效
这将在我们的PNo场上创建笛卡尔积。i、 e.每个记录连接到每个记录(但仅在该PNo上)
您将得到9个PNO13实例、4个1实例和1个92实例。现在我们只想返回MM不同的,所以将其添加到where子句中
SELECT *
FROM Table1 T1 INNER JOIN Table1 T2 ON T1.PNo = T2.PNo
WHERE T1.MM <> T2.MM
ORDER BY T1.ID
注意:Jonathan和mine给出的答案之间的区别之一是他的查询是可更新的,而我的查询是不可更新的。您可以使用子查询:
Select *
From YourTable
Where PNo IN
(Select T.PNo
From YourTable
Group By PNo, MM
Having Count(*) = 2)
不知道你的意思。检查每个PNo,即1、13和92。选择那些在
MM
-MM为真/假时具有不同值的值。所以1只有TRUE,所以不显示任何内容,因为没有任何内容与该值不同?92有一条记录,所以和这个值没有什么不同?13有TRUE和FALSE-因为布尔值只能有TRUE和FALSE,所以也不会有什么不同。。那么,展示一张空桌子?对不起,可能不是很清楚。我想选择ID为1、4、5的行,因为它们在MM中有两个不同的值:True和False。我不想要ID为3、6的行,因为它们只有True as值,单位为MM。
SELECT DISTINCT T1.ID, T1.PNo, T1.MM, T1.CP
FROM Table1 T1 INNER JOIN Table1 T2 ON T1.PNo = T2.PNo
WHERE T1.MM <> T2.MM
ORDER BY T1.ID
Select *
From YourTable
Where PNo IN
(Select T.PNo
From YourTable
Group By PNo, MM
Having Count(*) = 2)