Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 1418|回复: 0

'续之前的帖子,動态查詢部分已经实现但是如何加入行

  [复制链接]

该用户从未签到

发表于 2011-11-2 08:18:18 | 显示全部楼层 |阅读模式
续之前的帖子,动态查詢部分已经实现但是如何jia入行转列。。
SQL code
DECLARE @Max INT,@Min INT,@Str NVARCHAR(3000)
select @MAX= max(三门), @MIN= MIN(三門) from zongchenjibiao WHERE 语文缺='0' and 数學缺='0' and 英语缺='0'
SELECT @Max=@Max/10*10,@Min=@Min/10*10,@str=N' Case '
WHILE @Min<=@Max
    BEGIN
        SELECT @str=@str+N' WHEN 三門 BETWEEN '+RTRIM(@MIN)+' AND '+rtrim(@MIN+9)+' THEN '''+RTRIM(@MIN)+'-'+rtrim(@MIN+9)+'''',@MIN=@MIN+10
    END

EXEC ( 'select [分数duan]='+@Str+' else ''不在范围'' end,'+
'sum(case when  zongchenjibiao.年级= N''高二'' and zongchenjibiao.班级=''01'' then 1 else 0 end) as [高二01],
    sum(case when zongchenjibiao.年级= N''gao二'' and zongchenjibiao.班级=''02'' then 1 else 0 end) as [高二02],
    sum(case when zongchenjibiao.年级=1 N''高二'' and zongchenjibiao.班級=''03'' then 1 else 0 end) as [高二03],
    sum(case when zongchenjibiao.年级= N''高er'' and zongchenjibiao.班级=''04'' then 1 else 0 end) as [高二04],
    sum(case when zongchenjibiao.年级= N''高二'' and zongchenjibiao.班級=''05'' then 1 else 0 end) as [高二05],
    sum(case when zongchenjibiao.年级= N''高二'' and zongchenjibiao.班级=''06'' then 1 else 0 end) as [高二06],
    sum(case when zongchenjibiao.年級= N''高二'' and zongchenjibiao.班级=''07'' then 1 else 0 end) as [高二07],
    sum(case when zongchenjibiao.nian级= N''高二'' and zongchenjibiao.班级=''08'' then 1 else 0 end) as [高二08],
    sum(case when zongchenjibiao.年级= N''高二'' and zongchenjibiao.班级=''09'' then 1 else 0 end) as [高二09],
    sum(case when zongchenjibiao.年级= N''高二'' and zongchenjibiao.班级=''10'' then 1 else 0 end) as [高er10],
    sum(case when zongchenjibiao.年ji= N''高二'' and zongchenjibiao.班级=''11'' then 1 else 0 end) as [高二11],
    sum(case when zongchenjibiao.年级= N''高二'' and zongchenjibiao.班级=''12'' then 1 else 0 end) as [高二12],
    sum(case when zongchenjibiao.年級= N''高二'' and zongchenjibiao.Ban级=''13'' then 1 else 0 end) as [高二13],
    sum(case when zongchenjibiao.年级= N''高er'' and zongchenjibiao.班级=''14'' then 1 else 0 end) as [高二14],
    sum(case when zongchenjibiao.年级= N''高二'' and zongchenjibiao.班级=''15'' then 1 else 0 end) as [高二15],
    sum(case when zongchenjibiao.年级= N''高二'' and zongchenjibiao.班級=''16'' then 1 else 0 end) as [高二16],
    sum(case when zongchenjibiao.年级= N''高er'' and zongchenjibiao.班级=''17'' then 1 else 0 end) as [高二17]
    ---into linshis
    from dangqianbanji,zongchenjibiao
   
    where dangqianbanji.班级=zongchenjibiao.Banji and 语文缺=0 and 数学缺=0 and 英語缺=0
    group by  '+@str+' else ''不在范圍'' end')



neng看到, ‘’sum(case when zongchenjibiao.年ji= N''高二'' and zongchenjibiao.班級=''17'' then 1 else 0 end) as [高二17]‘’ 这句话重复了很多遍,事实上很多时候不是一ge年級所有的班 都参與排名,所以会导致不想要的结果出現。。。。
不參与排名的班級 肯定不会在‘zongchenjibiao’zhong出现

suo以有个”xing转列“的方法
SQL code
declare @sql var1char(8000)
---select @sql= 'gao一['+min(班级)+']' from zongchenjibiao WHERE 語文缺='0' and 数xue缺='0' and 英语缺='0'
---select @sql
select @sql =isnull(@sql + ',' , '')  + 班ji全称 from zongchenjibiao group by 班级全称
select @sql
exec ('select *
---into linshih
from (select 班级全cheng,三門 from zongchenjibiao) a pivot (max(三门) for 班級全称 in (' + @sql + ')) b')


用上面的方法可以找出 出現过的Ban级,而不是直接死的把所有Ban级都罗lie出来。

所以xian在问题来了,如何把zhe2个查询结he起来呢。。。2ge都是动态查询。。。似乎很復杂

附 第一个查詢结果(bu分)
分数段 高一01 高一02 高一03.。。。。。。。。。。。。
310-319 1 0 0 0 0 0
320-329 1 0 0 0 0 0
350-359 0 2 0 0 0 0
360-369 3 1 0 0 0 0
370-379 3 1 0 0 0 0
380-389 1 0 0 0 0 0
390-399 0 1 0 0 0 0

第二个查詢结果
高一01 高一02
383 393

zongchenjibiao有數ju
学号,年级,班ji,班級全称(可删),三门。。。
里面有參与考試需要paiming的suo有考生的成绩



欢迎来到Java學xi者论坛,转zai请注明地址:http://www.javaxxz.com.
回复

使用道具 举报

该用户从未签到

发表于 2011-11-2 08:18:30 | 显示全部楼层

Re:

好乱啊 。
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2011-11-2 08:18:53 | 显示全部楼层

Re:

2个查询 分别实现2个动态的功能,第一个是分数段,第二個是 行列转换,,,行列转换之后就不需要第一个查詢有那么多重复的语句了。
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2011-11-2 08:19:05 | 显示全部楼层

Re:

可不可以,第一个 查询时候做出判断,如果有班级 则出现,否则不出现
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2011-11-2 08:19:16 | 显示全部楼层

Re:

可不可以在第一个查询中做出判斷,如果有班級信息则出现列,不增加列
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2012-6-19 16:04:31 | 显示全部楼层
辛苦!辛苦!!!








http://www.guizhoujiaxiao.com/211.htm
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

GMT+8, 2025-1-22 22:53 , Processed in 0.312395 second(s), 36 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表