首页 新闻 搜索 专区 学院

找sql高手 动态交叉查询问题

0
悬赏园豆:100 [待解决问题]

这个是记分表:

需要按照标准id来把每个人的科目分数(id_biaozhu)变成横列,列出来。当然之前要加入id_jiaoshi 和id_banji的限制条件。

这是标准表:

这个是学生表:

通过3个表的查询,来实现在限定条件下的效果。

实现效果:

网上看看,说是要3表的交叉查询,对了,我哪几项标准,是动态生成的,所以需要动态查询。

 

declare @sql nvarchar(4000)select @sql=''select @sql=@sql+',['+biaozhun_name+'] =sum(case id_biaozhun when '''+id_biaozhun+'''  then defen_dxbenke   else 0 end) 'from(select distinct b.id_biaozhun,c.biaozhun_name from jifen  as b inner join pingjiabiaozhun as c   on c.id_biaozhun=b.id_biaozhun and b.id_jiaoshi=1+ and b.id_banji=6 )  as a   order by id_biaozhun  exec('select id_stu 编号'+@sql+',个人本课总分=sum(defen_dxbenke)into # from jifen     as a group by id_stu    select b.stu_name as 姓名,a.* from # as a inner join stu_user as b on a.编号=b.id_stu  where   id_jiaoshi=1 and id_banji=6')

大家帮忙看看这个交叉查询的例子,表中只有一个班级数据时,查询没有错误,当有多个用户的数据时,查询时就报错

 

 id_jiaoshi和id_banji是查询时的约束条件,因为这个jifen表里有多位教师建立的班级信息,每个教师又可以建立不同班级。只查询到一个老师一个班级的学生。

 

求高手指点迷津

bj大海的主页 bj大海 | 初学一级 | 园豆:56
提问于:2013-11-15 21:56
< >
分享
所有回答(5)
0

没见过这种写法的 )0.0

老榕树下的咖啡屋 | 园豆:128 (初学一级) | 2013-11-15 23:33
0

1、先把不动态拼接的sql语句,写好,然后在去拼接

2、如果不符合的要求,可以通过sqlserver profile ,去看拼接sql的最终执行语句,从而找出问题所在

*、你可以试试在数据库调试,只是我不习惯sqlserver调试功能,很少用

秋壶冰月 | 园豆:5459 (大侠五级) | 2013-11-16 01:20
0

看一下我这个行转列的例子吧

http://www.cnblogs.com/li-peng/archive/2012/02/01/2334973.html

li-peng | 园豆:954 (小虾三级) | 2013-11-18 09:52

这个事单表的,我需要多表的动态查询。

支持(0) 反对(0) bj大海 | 园豆:56 (初学一级) | 2013-12-04 15:55

@bj大海: 

我写了一个大概,你自己再修改一下吧

declare @sql varchar(8000)
declare @jiaoshi int 
set @jiaoshi =2
set @sql ='select Stu_user.id_stu ,Stu_user.stu_name'
select @sql =@sql +', sum(case biaozhun_name when '''+biaozhun_name+''' then defen_dxbenke else 0 end) as '''+biaozhun_name+''' '+char(10)
from (select distinct biaozhun_name from pingjiabiaozhun) T 
print @sql
select @sql=@sql+'from jifen
left join pingjiabiaozhun
on jifen.id_biaozhun=pingjiabiaozhun.id_biaozhun
left join Stu_user 
on jifen.id_stu=Stu_user.id_stu where Stu_user.id_jiaoshi = '''+convert(varchar(20),@jiaoshi)+''' group by Stu_user.id_stu,Stu_user.stu_name'

print @sql

exec(@sql)
支持(0) 反对(0) li-peng | 园豆:954 (小虾三级) | 2013-12-06 23:10
0

十分不行话,先创建一个结果的临时表,然后循环或是光标对记分表进行分析。然后插入或是更新至临时表中。
可以参考下面链接:
http://www.cnblogs.com/insus/p/3300818.html
http://www.cnblogs.com/insus/articles/1969896.html
http://www.cnblogs.com/insus/articles/1970577.html
http://www.cnblogs.com/insus/archive/2011/03/04/1970707.html
http://www.cnblogs.com/insus/articles/1971446.html

Insus.NET | 园豆:932 (小虾三级) | 2013-12-06 09:07
0

大哥,我是逛博客园好几个月了,是个初学者,第一次就发现了您,感觉你什么都知道,前几天申请了个账号就关注了你,你能指点我一下,关于WebSocket的问题吗

咖啡少年不加糖 | 园豆:104 (初学一级) | 2018-01-12 18:25
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册