SQL Server — сравнение по нескольким столбцам в разных строках в одной таблице

#sql #sql-server #compare

#sql #sql-сервер #Сравнить

Вопрос:

У меня есть таблица, которая содержит значения, считываемые с 2 метров:

 ----------------------------
   Date   | MeterID | Value
----------------------------
  1/2/14       A       1.3
  2/2/14       A       1.8
  2/2/14       B       3.8
  3/3/14       A       1.2
  4/3/14       A       1.8
  4/3/14       B       2.9
 

Мне нужен запрос, который будет подсчитывать количество дней, в течение которых существует чтение для ОБОИХ типов счетчиков ( A amp; B )?
В приведенном выше примере это должно дать 2 в качестве результата.

Спасибо.

Ответ №1:

Вы можете использовать временную таблицу для перечисления [Date] s, когда были вхождения MeterID для обоих A и B , а затем COUNT() все это [Date] s :

 SELECT COUNT(t.*) 
FROM ( SELECT [Date] 
       FROM [table] 
       GROUP BY [Date] 
       HAVING COUNT(DISTINCT [MeterID]) = 2
     ) t
 

Комментарии:

1. Спасибо за это …. еще один вопрос….. Если бы у меня было другое поле, которое я также хотел отфильтровать, например, имя человека, который снимал показания, тогда я бы хотел подсчитать количество дней, в течение которых каждый человек снимал показания обоих счетчиков в один и тот же день — как бы я это добавил???

2. @user3359779: Ну, это не совсем понятно, но вы можете попробовать добавить name в SELECT GROUP BY предложения and , чтобы получить данные для каждого человека и дня.

Ответ №2:

Другое решение, использующее наборы:

 select count(*) from
(
    select distinct date from table where meterid='A'
    intersect
    select distinct date from table where meterid='B'
) x