说,我有一个看起来像这样的表:
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")的所有行,但我不知道如何制定查询以捕获具有不同值的行。
答案 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和我的答案之间的区别之一是他的查询是可更新的,而我的查询不是。