2016-03-23 3 views
0

У меня есть таблица для системы посещаемости (IN/OUT), вот пример данных.Выберите отдельный столбец A, где столбец B содержит все требуемые данные?

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 
........... 

То, что я хочу, чтобы это все идентификаторы, что имеет транзакцию IN и OUT для каждого дня я даю, так что в моем примере, если я дам 21 марта и 22 я буду получать 1-3 Только с 4 Безразлично идентификаторами У меня есть транзакция OUT 21 марта. Я попытался использовать оператор IN, но не работает, поскольку он извлекает все идентификаторы, которые имеют транзакцию в любую дату.

ответ

0

Попробуйте это:

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 
+0

совершенны, спасибо. – crimson589