2013-10-13 172 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 
) 

我已经硬编码的成员类型因为在查询中我没有看到成员类型ID和成员类型名称之间的任何映射。如果存在这样的映射,那么这可以被替换。

+0

我尝试用自己的方式,但在最后“),”那里的错误指示。可以解释什么是“mt”和“cnt”? – user2378645

+0

我对数据库进行了一些更改以获得SignIn表。所以它会像我需要将SignIn表中的数据登录,注销,kioskid和成员中的MemberCategory合并,然后合并。我应该如何编码? – user2378645

0

您可以使用子查询和GROUP BY做

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

你需要在你的主查询的其他组中加入成员类型,否则失败。 – Lokesh

+0

由于主查询可以查询整个成员表,查询不会失败,因为没有MemberType。但是我意识到如果没有MemberType,你就不会知道哪个计数属于哪个MemberType。做了编辑以反映这一点。 – thomasdiong