位置: 编程技术 - 正文

sql 普通行列转换

编辑:rootadmin
问题:假设有张学生成绩表(tb)如下: 姓名 课程 分数 张三 语文 张三 数学 张三 物理 李四 语文 李四 数学 李四 物理 想变成(得到如下结果): 姓名 语文 数学 物理 ---- ---- ---- ---- 李四 张三 ------------------- */ create table tb(姓名 varchar() , 课程 varchar() , 分数 int) insert into tb values('张三' , '语文' , ) insert into tb values('张三' , '数学' , ) insert into tb values('张三' , '物理' , ) insert into tb values('李四' , '语文' , ) insert into tb values('李四' , '数学' , ) insert into tb values('李四' , '物理' , ) go --SQL SERVER 静态SQL,指课程只有语文、数学、物理这三门课程。(以下同) select 姓名 as 姓名 , max(case 课程 when '语文' then 分数 else 0 end) 语文, max(case 课程 when '数学' then 分数 else 0 end) 数学, max(case 课程 when '物理' then 分数 else 0 end) 物理 from tb group by 姓名 --SQL SERVER 动态SQL,指课程不止语文、数学、物理这三门课程。(以下同) declare @sql varchar() set @sql = 'select 姓名 ' select @sql = @sql + ' , max(case 课程 when ''' + 课程 + ''' then 分数 else 0 end) [' + 课程 + ']' from (select distinct 课程 from tb) as a set @sql = @sql + ' from tb group by 姓名' exec(@sql) --SQL SERVER 静态SQL。 select * from (select * from tb) a pivot (max(分数) for 课程 in (语文,数学,物理)) b --SQL SERVER 动态SQL。 declare @sql varchar() select @sql = isnull(@sql + '],[' , '') + 课程 from tb group by 课程 set @sql = '[' + @sql + ']' exec ('select * from (select * from tb) a pivot (max(分数) for 课程 in (' + @sql + ')) b') --------------------------------- /* 问题:在上述结果的基础上加平均分,总分,得到如下结果: 姓名 语文 数学 物理 平均分 总分 ---- ---- ---- ---- ------ ---- 李四 . 张三 . */ --SQL SERVER 静态SQL。 select 姓名 姓名, max(case 课程 when '语文' then 分数 else 0 end) 语文, max(case 课程 when '数学' then 分数 else 0 end) 数学, max(case 课程 when '物理' then 分数 else 0 end) 物理, cast(avg(分数*1.0) as decimal(,2)) 平均分, sum(分数) 总分 from tb group by 姓名 --SQL SERVER 动态SQL。 declare @sql varchar() set @sql = 'select 姓名 ' select @sql = @sql + ' , max(case 课程 when ''' + 课程 + ''' then 分数 else 0 end) [' + 课程 + ']' from (select distinct 课程 from tb) as a set @sql = @sql + ' , cast(avg(分数*1.0) as decimal(,2)) 平均分 , sum(分数) 总分 from tb group by 姓名' exec(@sql) --SQL SERVER 静态SQL。 select m.* , n.平均分 , n.总分 from (select * from (select * from tb) a pivot (max(分数) for 课程 in (语文,数学,物理)) b) m, (select 姓名 , cast(avg(分数*1.0) as decimal(,2)) 平均分 , sum(分数) 总分 from tb group by 姓名) n where m.姓名 = n.姓名 --SQL SERVER 动态SQL。 declare @sql varchar() select @sql = isnull(@sql + ',' , '') + 课程 from tb group by 课程 exec ('select m.* , n.平均分 , n.总分 from (select * from (select * from tb) a pivot (max(分数) for 课程 in (' + @sql + ')) b) m , (select 姓名 , cast(avg(分数*1.0) as decimal(,2)) 平均分 , sum(分数) 总分 from tb group by 姓名) n where m.姓名 = n.姓名') drop table tb ------------------ ------------------ /* 问题:如果上述两表互相换一下:即表结构和数据为: 姓名 语文 数学 物理 张三      李四      想变成(得到如下结果): 姓名 课程 分数 ---- ---- ---- 李四 语文 李四 数学 李四 物理 张三 语文 张三 数学 张三 物理 -------------- */ create table tb(姓名 varchar() , 语文 int , 数学 int , 物理 int) insert into tb values('张三',,,) insert into tb values('李四',,,) go --SQL SERVER 静态SQL。 select * from ( select 姓名 , 课程 = '语文' , 分数 = 语文 from tb union all select 姓名 , 课程 = '数学' , 分数 = 数学 from tb union all select 姓名 , 课程 = '物理' , 分数 = 物理 from tb ) t order by 姓名 , case 课程 when '语文' then 1 when '数学' then 2 when '物理' then 3 end --SQL SERVER 动态SQL。 --调用系统表动态生态。 declare @sql varchar() select @sql = isnull(@sql + ' union all ' , '' ) + ' select 姓名 , [课程] = ' + quotename(Name , '''') + ' , [分数] = ' + quotename(Name) + ' from tb' from syscolumns where name! = N'姓名' and ID = object_id('tb') --表名tb,不包含列名为姓名的其它列 order by colid asc exec(@sql + ' order by 姓名 ') --SQL SERVER 动态SQL。 select 姓名 , 课程 , 分数 from tb unpivot (分数 for 课程 in([语文] , [数学] , [物理])) t --SQL SERVER 动态SQL,同SQL SERVER 动态SQL。 -------------------- /* 问题:在上述的结果上加个平均分,总分,得到如下结果: 姓名 课程 分数 ---- ------ ------ 李四 语文 . 李四 数学 . 李四 物理 . 李四 平均分 . 李四 总分 . 张三 语文 . 张三 数学 . 张三 物理 . 张三 平均分 . 张三 总分 . ------------------ */ select * from ( select 姓名 as 姓名 , 课程 = '语文' , 分数 = 语文 from tb union all select 姓名 as 姓名 , 课程 = '数学' , 分数 = 数学 from tb union all select 姓名 as 姓名 , 课程 = '物理' , 分数 = 物理 from tb union all select 姓名 as 姓名 , 课程 = '平均分' , 分数 = cast((语文 + 数学 + 物理)*1.0/3 as decimal(,2)) from tb union all select 姓名 as 姓名 , 课程 = '总分' , 分数 = 语文 + 数学 + 物理 from tb ) t order by 姓名 , case 课程 when '语文' then 1 when '数学' then 2 when '物理' then 3 when '平均分' then 4 when '总分' then 5 end drop table tb

推荐整理分享sql 普通行列转换,希望有所帮助,仅作参考,欢迎阅读内容。

sql 普通行列转换

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

mssql 两种数据插入方式 --常用的方式insertintojobs(job_desc,min_lvl,max_lvl)values('SQL语句插入数据A',,)insertintojobs(job_desc,min_lvl,max_lvl)values('SQL语句插入数据B',,)insertintojobs(job_desc,min

mssql @@ERROR 使用 mssql错误日志文件存放位置:C:ProgramFilesMicrosoftSQLServerMSSQLLOG用记事本查看@@ERROR返回一个整数0为正常sysmessages存放的错误信息系统表(master)USEmasterselect*

sqlserver 数据库日志备份和恢复步骤 --创建测试数据库CREATEDATABASEDbGO--对数据库进行备份BACKUPDATABASEDbTODISK='c:db.bak'WITHFORMATGO--创建测试表CREATETABLEDb.dbo.TB_test(IDint)--延时1秒钟,再进行后面的操

标签: sql 普通行列转换

本文链接地址:https://www.jiuchutong.com/biancheng/349067.html 转载请保留说明!

上一篇:SQL Server的复制功能(sql server复制数据库的方法)

下一篇:mssql 两种数据插入方式(sql两个数据怎么合并到一起)

  • 延期申报后可否延期缴纳税款
  • 劳务税是什么 和个税的区别
  • 综合保税区是什么意思,举个例子
  • 公司和劳务公司合作工资代发
  • 汇算清缴调表不调账调的是哪张表
  • 金蝶软件数量金额式怎样输入数据
  • 小规模企业多交增值税
  • 房地产预收账款如何缴纳印花税
  • 工会经费拨缴是什么意思
  • 公司内帐和外账的区别
  • 咨询费成本怎么成本结转
  • 客户充值
  • 广告业服务收费交税的会计处理怎么做?
  • 支付货款订金入什么科目核算与会计分录
  • 应付股东款可以结转实收资本吗
  • 固定资产交换的账务处理
  • 通讯费企业所得税计算
  • 库存材料盘亏会计分录
  • 消防增值服务
  • 增值税减免税申报明细表怎么填写1%
  • 房产税税计入什么科目
  • 其他业务收入是什么意思
  • 小微企业享受优惠
  • 取得赔偿款的发票可以抵扣吗
  • 小规模劳务公司税率是多少
  • 土地买卖所得税由谁承担
  • 环境保护税交给谁
  • 工会会费可以一年交两个单位吗
  • 税前扣除是好事吗
  • 月末累计折旧怎么结转
  • 2020 php 薪资
  • yii框架教程
  • regsvc32.exe - regsvc32是什么进程 有什么用
  • 除了个税还有什么税
  • php ftell
  • 汽车定额发票怎么填写
  • 新准则有哪些
  • 未取得合法凭证税前扣除
  • 纳税人转让旧房及建筑物
  • 退回的税控盘费用如何做会计分类
  • 浏览器集成什么意思
  • php jsonp
  • 申报表中的免税销售额是收入吗
  • 织梦相关文章调用
  • 企业投资股票收益怎么交税
  • 差旅费报销流程图及分析解释
  • 建设工程的材料质量检测由谁负责
  • 应付账款的账务处理
  • sql语句批量添加数据
  • 信用卡的还款方式怎么查
  • 农民专业合作社法
  • 投资房地产的后续计量有哪几种模式
  • 企业逾期贷款利息影响征信吗
  • 产品保修要钱吗
  • 单独运费怎么做账
  • 发票代码和发票号码是唯一的吗
  • 资产负债表期初余额和期末余额
  • 农民工工资专户销户流程
  • 存货的实际成本法
  • 企业什么情形必须签无固定期限合同
  • 在mysql中,创建数据库的基本语法格式是
  • windows xp系
  • ntfs跟fat32
  • vs 2008
  • FreeBSD mpd VPN服务器安装步骤
  • linux arp -s
  • win8初始登录账号密码
  • cocos2dx场景切换
  • jsonp的使用
  • Android: Receiving Data from the Send Intent,将自己的app注册系统分享
  • 数独算法代码c语言
  • centos 开机启动程序
  • 在Debian(Raspberry Pi)树莓派上安装NodeJS的教程详解
  • shell脚本逐条执行
  • javascript程序设计教程
  • jQuery对checkbox 复选框的全选全不选反选的操作
  • android获取系统弹窗,自动点击
  • 北京税务机关代码查询
  • 昆山华润燃气多少钱一方
  • 客运企业增值税税率是多少
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设