2016-04-24 3 views
1
SELECT vhfloorno, 
     Count(ischeckin) AS ChecKIn, 
     Count(ischeckout) AS CheckOut 
FROM visitorhistory t1 
WHERE (Year(vhcheckinebi) = Year(@From) 
     AND Month(vhcheckinebi) = Month(@From) 
     AND Day(vhcheckinebi) = Day(@From)) 
     OR (Year(vhcheckoutebi) = Year(@To) 
      AND Month(vhcheckoutebi) = Month(@To) 
      AND Day(vhcheckoutebi) = Day(@To)) 
GROUP BY vhfloorno 

Я хочу показать счетчик посещений и выезд посетителей из одной таблицы на основе этажа, но по этому запросу значения Check In и Check совпадают. где vhcheckinebi - это дата-время, когда посетитель регистрируется и vhcheckoutebi - это дата и время, когда посетитель просматривает. Пожалуйста, помогите мне.Я хочу показать отчет из одного стола

+0

Считает ли возвращать разные значения, когда вы удаляете целое условие? –

+0

Check In и Check Out возвращают одинаковое значение, даже если они отличаются друг от друга –

ответ

1

Возможно, вы хотите условно агрегация:

SELECT vhfloorno, 
     sum(case when ischeckin = 1 then 1 else 0 end) AS ChecKIn, 
     sum(case when ischeckout = 1 then 1 else 0 end) AS CheckOut 
FROM visitorhistory t1 
... 
2

Предполагая, что ваша колонка ischeckin имеет тип bit вы должны использовать SUM(CAST(ischeckin as INT)) вместо Count(ischeckin) иначе как «ложь» и «истинные» значения будут учитываться каждый раз:

SELECT vhfloorno, 
     SUM(CAST(ischeckin as INT)) AS ChecKIn, 
     SUM(CAST(ischeckout as INT)) AS CheckOut 
FROM visitorhistory t1 
WHERE ... 

Смотрите здесь как минимум пример: http://data.stackexchange.com/stackoverflow/query/477199/checkin-and-checkout-counts