访问VBA:仅选择多个值

时间:2017-08-29 10:12:04

标签: 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中具有不同值的那些行。

我的计划是创建一个具有PNo不同值的表,使用通常的记录集遍历该表并为每个PNo编写SQL查询。 现在我的问题是构建SQL查询。

我可以选择Table.PNo = rs(" PNo")的所有行,但我不知道如何制定查询以捕获具有不同值的行。

3 个答案:

答案 0 :(得分:1)

您可以使用子查询:

Select *
From YourTable
Where PNo IN 
    (Select T.PNo 
    From YourTable        
    Group By PNo, MM
    Having Count(*) = 2)

答案 1 :(得分:0)

以下应该做你想做的事:

require(dataPreparation)
data("messy_adult")
head(messy_adult[, .(date1, date2, date3, date4)])
        date1      date2       date3           date4
1: 2017-10-07         NA 19-Jan-2017 21-January-2017
2: 2017-31-12 1513465200 06-Jun-2017    08-June-2017
3: 2017-12-10 1511305200 03-Jul-2017    05-July-2017
4: 2017-06-09 1485126000 19-Jul-2017    21-July-2017
5: 2017-02-03 1498345200 16-May-2017     18-May-2017
6: 2017-04-10 1503183600 02-Apr-2017   04-April-2017

messy_adult <- findAndTransformDates(messy_adult)
head(messy_adult[, .(date1, date2, date3, date4)])

 date1               date2      date3      date4
1: 2017-07-10                <NA> 2017-01-19 2017-01-21
2: 2017-12-31 2017-12-17 00:00:00 2017-06-06 2017-06-08
3: 2017-10-12 2017-11-22 00:00:00 2017-07-03 2017-07-05
4: 2017-09-06 2017-01-23 00:00:00 2017-07-19 2017-07-21
5: 2017-03-02 2017-06-25 01:00:00 2017-05-16 2017-05-18
6: 2017-10-04 2017-08-20 01:00:00 2017-04-02 2017-04-04

内部联接确保只包含那些同时包含MM false和MM true的PN。

答案 2 :(得分:0)

认为这应该有用。

这将在我们的PNo字段上创建一个笛卡尔积。即每条记录都连接到每条记录(但仅限于该PNo)。

to[]

你最终将得到9个PNo 13个实例,4个1和92个实例。现在我们只想返回MM不同的实例,所以将它添加到WHERE子句中。

SELECT  *
FROM    Table1 T1 INNER JOIN Table1 T2 ON T1.PNo = T2.PNo  

这将返回四条记录。 SELECT * FROM Table1 T1 INNER JOIN Table1 T2 ON T1.PNo = T2.PNo WHERE T1.MM <> T2.MM ORDER BY T1.ID 1和92将消失,因为MM的结果与那些相同。 PNo号码4将被返回两次,因为ID值与ID 1和ID 5中的值不同。

要删除重复的值,您可以使用DISTINCT:

MM

注意: @Jonathan和我的答案之间的区别之一是他的查询是可更新的,而我的查询不是。