学习型 ASP/PHP/ASP.NET 主机 30元/年全能 ASP/PHP/ASP.NET 主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付
发新话题
打印

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

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

这种数据处理用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


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

出来了用我这例子实际运行一下看看能否通过,请不要想当然的写,谢谢

TOP

答复

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

TOP

这个语句可以完成

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 table1.cname=cname and max(number)=table1.number
)

TOP

这个语句可以实现

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 table1.cname=cname and max(number)=table1.number
)

TOP

发新话题