位置: 编程技术 - 正文

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两个数据怎么合并到一起)

  • 民营医院一般纳税人帐务处理视频税收风险
  • 怎么确定开票项目是否属于经营范围
  • 本年支付 历年支付
  • 其他综合收益税后净额影响净利润吗
  • 2016 营改增 对建筑企业影响
  • 登记多栏式日记总账的依据是
  • 长期股权投资超过50%
  • 增值税专票逾期抵扣怎么操作
  • 其他业务收入的核算内容
  • 采购办公用品计入什么科目
  • 经营性租赁购入会计分录
  • 银行短期理财利息怎么算
  • 土地出让金产生的利息交契税吗
  • 用友u8计提企业所得税
  • 作价入股的土地可以摊销无形资产吗
  • 建安企业增值税税率是多少
  • 所得税工资薪金允许税前扣除
  • 公司接受承兑汇票的风险
  • 报销差旅费退回余款填什么凭证
  • pb估值是什么意思
  • 员工出差时法律规定
  • 小企业原材料包括
  • 工会经费,职工福利费,教育经费的扣除标准
  • 民法典对知识产权的定义
  • php mb_convert_encoding
  • 顺丰充值的钱可以退吗
  • 招待费审批流程
  • 员工意外受伤费用谁出
  • 资产与负债的计税基础
  • PHP:imagepsloadfont()的用法_GD库图像处理函数
  • 现金流量表结构分析
  • php判断密码长度
  • 小规模纳税人的企业所得税怎么算
  • 公司设备搬家费会计分录
  • php简单统计中文字符
  • 购进原材料款项未付应编制什么凭证
  • 逻辑电路选择器
  • 合作社计提工资
  • 个人申请给公司账户转账
  • 帝国cms工作流
  • 企业收到财政拨付的专项资金账务处理
  • 个人所得税申报退税能退多少
  • 员工工资是哪个会计科目
  • db2 21000怎么解决
  • 资产负债表中的货币资金包括哪些
  • 通过法院拍卖取得的土地没有得到执行属于什么案件
  • 在建工程账务处理会计分录
  • 合作社分红计入什么科目
  • 购进免税农产品进项税额计算
  • 保障房异地建设费属不属于土地成本
  • 委托代销商品支付的手续费计入销售费用吗
  • 土地拍卖相关法律法规
  • 银行代扣水电
  • 大中小企业划分标准2022最新
  • 通信地址需要写什么
  • 发票专用章刻制
  • 固定资产折旧怎么算
  • 新单位怎么建账
  • 产品成本核算方法受那些因素影响
  • fedora修改ip地址
  • 445端口 关闭
  • virtualbouncer.exe是什么进程
  • ubuntu 命令大全
  • linux ioctrl
  • SymSPort.exe - SymSPort是什么进程 有何作用
  • win7系统安装软件乱码
  • js判断密码强弱
  • node.js可以写接口吗
  • android 自定义view onlayout
  • js如何使用
  • linux bash脚本
  • 图片在线预览html5
  • python微信公众号开发教程
  • Unity uGui RawImage 渲染小地图
  • javascript函数大全
  • 辽宁省国家税务局电子税务局官网
  • 国家税务局浙江省电子税务局新版
  • 企业所得税率2023年
  • 特许权使用费包括哪些内容
  • 四季度预缴申报表
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设