注册 登录
编程论坛 SQL Server论坛

[求助]这个统计怎么写

yueyazhimeng 发布于 2006-10-14 15:37, 481 次点击

我的表信息为:
ID USER_ID SET_ID USERNAME APPLYDATE
1 2 4 教师001 2006-9-18 0:00:00
2 1 8 职工002 2006-9-18 0:00:00
3 1 8 职工002 2006-9-19 0:00:00
4 1 8 职工002 2006-9-19 10:00:00
5 3 5 教师002 2006-9-25 0:00:00
6 4 7 职工001 2006-9-25 0:00:00
7 2 7 职工001 2006-9-25 0:00:00
如何写SQL语句得到
USER_ID SET_ID TOTAL
1 8 3
2 8 0
3 8 0
4 8 0
1 7 0
2 7 1
3 7 0
4 7 1
1 5 0
2 5 0
3 5 1
4 5 0
1 4 0
2 4 1
3 4 0
4 4 0
就是根据记录中的用户统计设备的使用次数,只要这个用户有使用过设备,那么其他没使用的设备也要统计出为0,我横竖写不出,哪位高手帮帮忙

2 回复
#2
LouisXIV2006-10-14 16:00

declare @test table
(
ID int identity(1,1),
USER_ID int,
SET_ID int,
USERNAME char(7),
APPLYDATE datetime
)
insert into @test
select 2,4,'教师001','2006-9-18 0:00:00' union all
select 1,8,'职工002','2006-9-18 0:00:00' union all
select 1,8,'职工002','2006-9-19 0:00:00' union all
select 1,8,'职工002','2006-9-19 10:00:00' union all
select 3,5,'教师002','2006-9-25 0:00:00' union all
select 4,7,'职工001','2006-9-25 0:00:00' union all
select 2,7,'职工001','2006-9-25 0:00:00'

select aa.USER_ID,aa.SET_ID,TOTAL=count(c.ID)
from
(
select USER_ID,SET_ID
from
(
select SET_ID from @test group by SET_ID
) a
cross join
(
select USER_ID from @test group by USER_ID
) b
) aa
left join @test c
on aa.USER_ID=c.USER_ID
and aa.SET_ID=c.SET_ID
group by aa.USER_ID,aa.SET_ID
order by aa.SET_ID desc,aa.USER_ID

/*
USER_ID SET_ID TOTAL
----------- ----------- -----------
1 8 3
2 8 0
3 8 0
4 8 0
1 7 0
2 7 1
3 7 0
4 7 1
1 5 0
2 5 0
3 5 1
4 5 0
1 4 0
2 4 1
3 4 0
4 4 0
*/

#3
yueyazhimeng2006-10-16 09:47

可是我的表数据是动态添加的,只要取某个设备ID(SET_ID)各个用户的统计
create PROCEDURE [dbo].[GetSpecilSat]
(
@SET_ID int
)
AS
下面的如何写

1