2013-10-13 5 views
1

В настоящее время я использую инструкцию select, чтобы медленно захватить покровительство члена для разных категорий участников в разном временном интервале с 1 системой киоска.Заявление о множественном выборе SQL

SELECT COUNT(MemberID) from Member where signin >= '13-10-2013 09:00' and signout <= '13-10-2013 15:00' and MemberType = 1 and kioskid = 1 

SELECT COUNT(MemberID) from Member where signin >= '13-10-2013 15:00' and signout <= '13-10-2013 20:00' and MemberType = 1 and kioskid = 1 

SELECT COUNT(MemberID) from Member where signin >= '13-10-2013 09:00' and signout <= '13-10-2013 15:00' and MemberType = 2 and kioskid = 1 

SELECT COUNT(MemberID) from Member where signin >= '13-10-2013 15:00' and signout <= '13-10-2013 20:00' and MemberType = 2 and kioskid = 1 

Существуют ли способы для меня, чтобы захватить данные вместе в одном запросов следующим образом:

   | 09:00 - 15:00 | 15:00 - 20:00 
Premium Member |  21  |  55 
Standard Member |  100  |  300 

ответ

0

Да, вы можете сделать так:

select * from (
select 'Premium Member' mt, a.cnt "9-15", b.cnt "15-20" from 
(SELECT COUNT(MemberID) cnt from Member where signin >= '13-10-2013 09:00' and signout <= '13-10-2013 15:00' and MemberType = 1 and kioskid = 1) a, (SELECT COUNT(MemberID) cnt from Member where signin >= '13-10-2013 15:00' and signout <= '13-10-2013 20:00' and MemberType = 1 and kioskid = 1) b 
union 
select 'Standard Member' mt, c.cnt "9-15", d.cnt "15-20" from 
(SELECT COUNT(MemberID) from Member where signin >= '13-10-2013 09:00' and signout <= '13-10-2013 15:00' and MemberType = 2 and kioskid = 1) c, (SELECT COUNT(MemberID) from Member where signin >= '13-10-2013 15:00' and signout <= '13-10-2013 20:00' and MemberType = 2 and kioskid = 1) d 
) 

я жестко закодированные типы элементов поскольку я не вижу сопоставления между идентификатором типа члена и именем типа члена в вашем запросе. Если такое отображение существует, то это можно заменить.

+0

Стараюсь свой путь, но ошибка при указывают на последний «)». Можете объяснить, что такое «mt» и «cnt»? – user2378645

+0

У меня есть некоторые изменения в моей базе данных, чтобы иметь таблицы SignIn. так что это будет похоже на то, что мне нужно объединить данные signin, signout, kioskid из таблиц SignIn и MemberCategory от членов, а затем объединить оба. Как мне это закодировать? – user2378645

0

Вы можете использовать подзапрос и группу, чтобы сделать

select MemberType, 
    COUNT(MemberID in (select MemberID 
         from Member 
         where signin >= '13-10-2013 09:00' and signout <= '13-10-2013 15:00')), 
    COUNT(MemberID (select MemberID 
        from Member 
        where signin >= '13-10-2013 15:00' and signout <= '13-10-2013 20:00')) 
from Member 
group by MemberType 
+0

Вам нужно ввести тип члена в свою основную группу запроса else по wil fail. – Lokesh

+0

Запрос не будет работать без MemberType, поскольку основной запрос может запрашивать всю таблицу Member. Но я понял, что без MemberType вы не будете знать, какой номер счета принадлежит типу MemberType. Сделано редактирование, чтобы отразить это. – thomasdiong

Смежные вопросы