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

这种数据处理用sql怎么写?

m19821223 发布于 2008-04-25 01:35, 784 次点击
这种数据处理用sql怎么写?

诸位高手,我这道疑问是针对一个高校中的算课时量的例子,比如下面示例数据
Tname    Cname    Number    Class
Jim    Maths    60    计算机1班
Jim    Maths    120    计算机2班
Jim    Maths    180    计算机3班
Jim    physics    180    计算机3班
Jim    physics    120    计算机2班
bob    Maths    100    自动化1班
bob    computer 120    计算机2班

要求:如果一位老师教授有重复课,则将教授重复课的班人数最大的一行中xs列置1,这位老师这门课其

余的班所对应的xs列均为0.7,如果这名老师没有教授重复课,那么xs为1,这位老师的标准课时量是总课

时以xs(系数)列中的值,对于本例中,最后用sql server达到的效果就是把xs列置数如下:
Tname    Cname    Number    Class    xs
Jim    Maths    60    计算机1班    0.7
Jim    Maths    120    计算机2班    0.7
Jim    Maths    180    计算机3班    1
Jim    physics    180    计算机3班    1
Jim    physics    120    计算机2班    0.7
bob    Maths    100    自动化1班    1
bob    computer 120    计算机2班    1


请问怎么实现这一过程呢?因为实际的数据量很大,有好几万条,所以想寻求一种简单方法。希望大家做

出来了用我这例子实际运行一下看看能否通过,请不要想当然的写,谢谢
3 回复
#2
wdliu2008-04-25 10:06
答复
CREATE FUNCTION FN_NAME1
(@Tname varchar(10),
 @Cname varchar(10),
 @Classs varchar(20))
RETURNS DECIMAL(15,3)
AS
BEGIN
DECLARE @Nmber int,@suzlt decimal(15,3)
SELECT @Nmber=Max(Number) FROM PDATA WHERE Tname=@Tname and Cname=@Cname
SELECT @suzlt=(CASE @Nmber WHEN Number THEN 1 ELSE 0.7 END) FROM PDATA WHERE Tname=@Tname and Cname=@Cname  and class=@Classs
RETURN @suzlt
END
SELECT Tname,Cname,Number,Class,dbo.fn_name1(Tname,Cname,class) FROM pdata
#3
makebest2008-04-25 11:08
这个语句可以完成
update table1 set xs=0.7

update table1 set xs=1
where exists (
select tname,cname,max(number) as number from table1 t2
group by tname,cname
having table1.tname=tname and and max(number)=table1.number
)
#4
makebest2008-04-25 11:08
这个语句可以实现
update table1 set xs=0.7

update table1 set xs=1
where exists (
select tname,cname,max(number) as number from table1 t2
group by tname,cname
having table1.tname=tname and and max(number)=table1.number
)
1