请教SQL语句 四张表统计数据,高难度,请高手帮忙。

b249833177 2010-12-02 02:12:30
用户表
userinfo

userid username vmoney(账户余额)
10001 张三 20
10002 李四 100
10003 王五 80

奖品配置表
usprizedeploy

id prize_item
1 100元话费
2 50元话费
3 10元话费

用户抽奖记录表(prizeid 与 奖品配置表的id 对应)
usprecord

id prizeid userid
1 -1 10001
2 2 10003
3 3 10001
4 -1 10002
5 -1 10002

充值记录表
chargerecord
id userid amt(充值金额) cardname payresult
1 10001 50 神州行 支付成功
2 10002 100 联通卡 支付成功
3 10003 30 神州行 支付失败



要求统计成这样

序号 用户名 用户ID 抽奖次数 中奖次数 没中奖次数 账户余额(爱心币) 充值记录/条
1 张三 10001 2 1 1 20 1
2 李四 10002 2 0 2 100 1
3 王五 10003 1 1 0 80 0


请高手赐SQL 语句 数据库 SQL Server 2005












...全文
61 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
chen8410 2010-12-02
  • 打赏
  • 举报
回复
select ROW_NUMBER() over(order by getdate()) as [序号],
username as [用户名],
userid as [用户ID],
(select COUNT(1) from @usprecord where userid=t.userid) as [抽奖次数],
(select COUNT(1) from @usprecord where userid=t.userid and prizeid>0) as [中奖次数],
(select COUNT(1) from @usprecord where userid=t.userid and prizeid<=0) as [没中奖次数],
vmoney as [账户余额(爱心币)],
(select COUNT(1) from @chargerecord where userid=t.userid and payresult='支付成功') as [充值记录/条]
from @userinfo t
where userid in(select distinct userid from @usprecord)
加最后一行判断
b249833177 2010-12-02
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 chen8410 的回复:]
SQL code
declare @userinfo table(userid int, username varchar(20), vmoney int)
declare @usprecord table(id int, prizeid int, userid int)
declare @chargerecord table(id int, userid int, amt int, ca……
[/Quote]

查出来的结果把用户表里边的全部查出来了啊,没有参加过抽奖的用户不需要的。
现在需要从 抽奖记录表里边查询查询出来这些数据的。
chen8410 2010-12-02
  • 打赏
  • 举报
回复
declare @userinfo table(userid int, username varchar(20), vmoney int)
declare @usprecord table(id int, prizeid int, userid int)
declare @chargerecord table(id int, userid int, amt int, cardname varchar(100), payresult varchar(100))
insert @userinfo
select 10001 ,'张三', 20
union all select 10002 ,'李四', 100
union all select 10003 ,'王五', 80
insert @usprecord
select 1, -1, 10001
union all select 2, 2, 10003
union all select 3, 3, 10001
union all select 4, -1, 10002
union all select 5, -1, 10002
insert @chargerecord
select 1, 10001, 50 ,'神州行', '支付成功'
union all select 2, 10002, 100 ,'联通卡', '支付成功'
union all select 3, 10003, 30 ,'神州行', '支付失败'

select ROW_NUMBER() over(order by getdate()) as [序号],
username as [用户名],
userid as [用户ID],
(select COUNT(1) from @usprecord where userid=t.userid) as [抽奖次数],
(select COUNT(1) from @usprecord where userid=t.userid and prizeid>0) as [中奖次数],
(select COUNT(1) from @usprecord where userid=t.userid and prizeid<=0) as [没中奖次数],
vmoney as [账户余额(爱心币)],
(select COUNT(1) from @chargerecord where userid=t.userid and payresult='支付成功') as [充值记录/条]
from @userinfo t
--结果:
序号 用户名 用户ID 抽奖次数 中奖次数 没中奖次数 账户余额(爱心币) 充值记录/条
1 张三 10001 2 1 1 20 1
2 李四 10002 2 0 2 100 1
3 王五 10003 1 1 0 80 0
Rockets_NBA 2010-12-02
  • 打赏
  • 举报
回复
3表连接,
select
。。
sum(case when 。。。 then 1 else 0 end),
。。。
from tb
group by 。。。
b249833177 2010-12-02
  • 打赏
  • 举报
回复
不好意思,发错了,那个“奖品配置表” 没用。是三张表统计查询。

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧