Sql 选择不同的列A,其中列B包含所有必需的数据?
我有一个考勤系统表(IN/OUT),下面是一个示例数据Sql 选择不同的列A,其中列B包含所有必需的数据?,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我有一个考勤系统表(IN/OUT),下面是一个示例数据 ID | Date | Transaction 1 | 2016-03-21 06:04:55.000 | I 2 | 2016-03-21 06:04:55.000 | I 3 | 2016-03-21 06:04:55.000 | I 4 | 2016-03-21 06:04:55.000 | I 1 | 2016-03-21 17:04:55.000 |
ID | Date | Transaction
1 | 2016-03-21 06:04:55.000 | I
2 | 2016-03-21 06:04:55.000 | I
3 | 2016-03-21 06:04:55.000 | I
4 | 2016-03-21 06:04:55.000 | I
1 | 2016-03-21 17:04:55.000 | O
2 | 2016-03-21 17:04:55.000 | O
3 | 2016-03-21 17:04:55.000 | O
1 | 2016-03-22 06:04:55.000 | I
2 | 2016-03-22 06:04:55.000 | I
3 | 2016-03-22 06:04:55.000 | I
4 | 2016-03-22 06:04:55.000 | I
1 | 2016-03-22 17:04:55.000 | O
2 | 2016-03-22 17:04:55.000 | O
3 | 2016-03-22 17:04:55.000 | O
4 | 2016-03-22 17:04:55.000 | O
...........
我想要得到的是所有ID,在我给出的每个日期都有一个进出交易,所以在我的示例中,如果我给出3月21日和22日,我将只得到ID的1-3,因为4在3月21日没有进出交易。我尝试使用IN语句,但不起作用,因为它检索在任何日期具有事务的所有ID。尝试以下操作:
SELECT ID
FROM mytable
WHERE CAST([Date] AS Date) IN ('2016-03-21', '2016-03-22')
GROUP BY ID
HAVING COUNT(DISTINCT CASE
WHEN CAST([Date] AS Date) = '2016-03-21' THEN Transaction
END) = 2
AND
COUNT(DISTINCT CASE
WHEN CAST([Date] AS Date) = '2016-03-22' THEN Transaction
END) = 2