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)