求一个sql语句

merryhoneymoon 2006-03-09 09:55:14
有个投票结果表:一条记录为一个投票,以邮箱为判断值。一个邮箱一天可投若干次。
字段有:1投票邮箱 2是否会员 3投票日期

现在要做一个报表:统计每一天的人数
日期 會員投票人数 非會員投票人数 总人数
3月6日
3月7日
3月8日
。。。

各位高人,如何在一个sql中实现啊~~~~~
...全文
98 点赞 收藏 14
写回复
14 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
十一月猪 2006-03-10
CREATE TABLE T_VOTE
(
VOTE_MAIL VARCHAR(10),
IS_MEMBER VARCHAR(1),
VOTE_DATE DATETIME
)

INSERT INTO T_VOTE
SELECT '1' , 'Y' , GETDATE() UNION ALL
SELECT '2' , 'N' , GETDATE() UNION ALL
SELECT '2' , 'N' , GETDATE() UNION ALL
SELECT '1' , 'N' , GETDATE() UNION ALL
SELECT '1' , 'N' , GETDATE()+1

SELECT * FROM T_VOTE WHERE 1 = 1

SELECT VOTE_DATE ,
(SELECT COUNT(*) FROM T_VOTE WHERE IS_MEMBER = 'Y' AND VOTE_DATE = A.VOTE_DATE) AS MEMBER_VOTE,
(SELECT COUNT(*) FROM T_VOTE WHERE IS_MEMBER = 'N' AND VOTE_DATE = A.VOTE_DATE) AS NOT_MEMBER_VOTE,
(SELECT COUNT(*) FROM T_VOTE WHERE VOTE_DATE = A.VOTE_DATE) AS ALL_VOTE
FROM T_VOTE A
WHERE 1 = 1
GROUP BY VOTE_DATE
回复
liuweicai772 2006-03-10
说明一个邮箱对应一个人,但一个邮箱每天可以投若干次,这样 直接查询就会产生大量的
重复值 把重复值都过滤掉 不就是每天投票的人数了吗?
select distinct riqi,sum( case when 是会员 then 1 else 0) as 会员投票数,
sum( case when 否会员 then 1 else 0) as 非会员投票数,
into #lsb
from 库表
group by riqi

select riqi,会员投票数,非会员投票数,count(1) as 总人数
from #lsb
drop table #lsb
回复
zooop 2006-03-10
select c.投票日期,isnull (a.投票次数,0) as 会员次数,isnull (b.投票次数,0 ) as 非会员次数 ,(isnull (a.投票次数,0)+isnull (b.投票次数,0 )) as 总次数

from (select 投票日期,count(distinct 投票邮箱) as 投票次数
from tikets
where 是否会员='是'
group by 投票日期) a,
(select 投票日期,count(distinct 投票邮箱)as 投票次数
from tikets
where 是否会员='否'
group by 投票日期) b,
(select distinct 投票日期 from tikets) c

where c.投票日期 *=a.投票日期 and c.投票日期*=b.投票日期


对不起了,上两个有点问题,
这个是最终版,tikets表示的是库表,若将数据加到新表,select。。。into [新表名]
回复
zooop 2006-03-10
奥,会员次数+非会员次数 as 总次数那列有点问题,你删掉后就可以运行了,至于加和,这你该会拉
回复
zooop 2006-03-10
select c.投票日期,isnull (a.投票次数,0) as 会员次数,b.投票次数 as 非会员次数 ,
(会员次数+非会员次数 ) as 总次数

from (select 投票日期,count(投票邮箱)as 投票次数 from tikets where 是否会员 ='是' group by 投票日期) a,
(select 投票日期,count(投票邮箱)as 投票次数 from tikets where 是否会员='否' group by 投票日期) b,
(select distinct 投票日期 from tikets) c

where c.投票日期 *=a.投票日期 and c.投票日期*=b.投票日期

就这样了,我运行成功了。
回复
sunvintor 2006-03-09
那就再在sum里边加一个where,自己试一下吧。
回复
merryhoneymoon 2006-03-09
晕,各位要看仔细啊~~

一个邮箱对应一个会员或者非会员,而一个邮箱一天可以投票若干次,只能统计“邮箱”的个数,不是统计“是否会员”的个数。

我的报表要的是统计人数(邮箱数)啊,不是统计票数啊~~~~
回复
liuweicai772 2006-03-09
去掉重复值
select distinct riqi,sum( case when 是会员 then 1 else 0) as 会员投票数,
sum( case when 否会员 then 1 else 0) as 非会员投票数,
count(*) as 总人数
from 库表
group by riqi
回复
liuweicai772 2006-03-09
上面那个少了个逗号
select riqi,sum( case when 是会员 then 1 else 0) as 会员投票数,
sum( case when 否会员 then 1 else 0) as 非会员投票数,
count(*) as 总人数
from 库表
group by riqi
回复
liuweicai772 2006-03-09
select riqi,sum( case when 是会员 then 1 else 0) as 会员投票数
sum( case when 否会员 then 1 else 0) as 非会员投票数,
count(*) as 总人数
from 库表
group by riqi
回复
merryhoneymoon 2006-03-09
to:lsqkeke(可可),结果不太正确,记录有重复的。
因为一个邮箱对应一个会员或者非会员,而一个邮箱一天可以投票若干次,只能统计“邮箱”的个数,不是统计“是否会员”的个数。
回复
merryhoneymoon 2006-03-09
我哭啊,Access里运行不了
回复
judicainiao 2006-03-09
同意
回复
lsqkeke 2006-03-09
select 投票日期,
會員投票人数=sum(case 是否会员 when '是' then 1 else 0 end),
非會員投票人数=sum(case 是否会员 when '否' then 1 else 0 end),
总人数=count(1)
from 表
group by 投票日期
回复
相关推荐
发帖
疑难问题
创建于2007-09-28

2.1w+

社区成员

MS-SQL Server 疑难问题
申请成为版主
帖子事件
创建了帖子
2006-03-09 09:55
社区公告
暂无公告