sql中行列互换问题

【从零开始玩量化7】easyTrader: 自动化(程序化)交易利器 前面的文章,我们介绍了数据获取工具AKShare, 量化回测工具backtrader等,这一篇,介绍程序化交易工具easyTrader。作者网名食灯鬼,目前项目在Github上的star数已经有6.7k。这可能是目前,开源能找到的,最好用的程序化交易库了。本文介绍了easyTrader的简单用法,这个包还有很多功能,后续再继续写文章探究。 阅读详情

感觉还是蛮全的

/* 

标题:普通行列转换(version 2.0) 
问题:假设有张学生成绩表(tb)如下: 
姓名 课程 分数 
张三 语文 74 
张三 数学 83 
张三 物理 93 
李四 语文 74 
李四 数学 84 
李四 物理 94 
想变成(得到如下结果): 
姓名 语文 数学 物理 
---- ---- ---- ---- 
李四 74   84   94 
张三 74   83   93 
------------------- 
*/ 
  
createtable tb(姓名 varchar(10) , 课程 varchar(10) , 分数 int) 
insertinto tb values('张三' , '语文' , 74) 
insertinto tb values('张三' , '数学' , 83) 
insertinto tb values('张三' , '物理' , 93) 
insertinto tb values('李四' , '语文' , 74) 
insertinto tb values('李四' , '数学' , 84) 
insertinto tb values('李四' , '物理' , 94) 
go 
  
--SQL SERVER 2000 静态SQL,指课程只有语文、数学、物理这三门课程。(以下同) 
select姓名 as姓名 , 
 max(case课程 when'语文'then分数 else0end) 语文, 
 max(case课程 when'数学'then分数 else0end) 数学, 
 max(case课程 when'物理'then分数 else0end) 物理 
from tb 
groupby姓名 
  
--SQL SERVER 2000 动态SQL,指课程不止语文、数学、物理这三门课程。(以下同) 
declare@sqlvarchar(8000) 
set@sql='select 姓名 ' 
select@sql=@sql+' , max(case 课程 when '''+课程 +''' then 分数 else 0 end) ['+课程 +']' 
from (selectdistinct课程 from tb) as a 
set@sql=@sql+' from tb group by 姓名' 
exec(@sql) 
  
--SQL SERVER 2005 静态SQL。 
select*from (select*from tb) a pivot (max(分数) for课程 in (语文,数学,物理)) b 
  
--SQL SERVER 2005 动态SQL。 
declare@sqlvarchar(8000) 
select@sql=isnull(@sql+',' , '') +课程 from tb groupby课程 
exec ('select * from (select * from tb) a pivot (max(分数) for 课程 in ('+@sql+')) b') 
  
--------------------------------- 
  
/* 
问题:在上述结果的基础上加平均分,总分,得到如下结果: 
姓名 语文 数学 物理 平均分 总分 
---- ---- ---- ---- ------ ---- 
李四 74   84   94   84.00 252 
张三 74   83   93   83.33 250 
*/ 
  
--SQL SERVER 2000 静态SQL。 
select姓名 姓名, 
 max(case课程 when'语文'then分数 else0end) 语文, 
 max(case课程 when'数学'then分数 else0end) 数学, 
 max(case课程 when'物理'then分数 else0end) 物理, 
 cast(avg(分数*1.0) asdecimal(18,2)) 平均分, 
 sum(分数) 总分 
from tb 
groupby姓名 
  
--SQL SERVER 2000 动态SQL。 
declare@sqlvarchar(8000) 
set@sql='select 姓名 ' 
select@sql=@sql+' , max(case 课程 when '''+课程 +''' then 分数 else 0 end) ['+课程 +']' 
from (selectdistinct课程 from tb) as a 
set@sql=@sql+' , cast(avg(分数*1.0) as decimal(18,2)) 平均分 , sum(分数) 总分 from tb group by 姓名' 
exec(@sql) 
  
--SQL SERVER 2005 静态SQL。 
select m.* , n.平均分 , n.总分 from 
(select*from (select*from tb) a pivot (max(分数) for课程 in (语文,数学,物理)) b) m, 
(select姓名 , cast(avg(分数*1.0) asdecimal(18,2)) 平均分 , sum(分数) 总分 from tb groupby姓名) n 
where m.姓名 = n.姓名 
  
--SQL SERVER 2005 动态SQL。 
declare@sqlvarchar(8000) 
select@sql=isnull(@sql+',' , '') +课程 from tb groupby课程 
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(18,2)) 平均分 , sum(分数) 总分 from tb group by 姓名) n
where m.姓名 = n.姓名') 
  
droptable tb    
  
------------------ 
------------------ 
  
/* 
问题:如果上述两表互相换一下:即表结构和数据为: 
姓名 语文 数学 物理 
张三 74  83  93 
李四 74  84  94 
想变成(得到如下结果): 
姓名 课程 分数 
---- ---- ---- 
李四 语文 74 
李四 数学 84 
李四 物理 94 
张三 语文 74 
张三 数学 83 
张三 物理 93 
-------------- 
*/ 
  
createtable tb(姓名 varchar(10) , 语文 int , 数学 int , 物理 int) 
insertinto tb values('张三',74,83,93) 
insertinto tb values('李四',74,84,94) 
go 
  
--SQL SERVER 2000 静态SQL。 
select*from 
( 
 select姓名 , 课程 ='语文' , 分数 =语文 from tb 
 unionall 
 select姓名 , 课程 ='数学' , 分数 =数学 from tb 
 unionall 
 select姓名 , 课程 ='物理' , 分数 =物理 from tb 
) t 
orderby姓名 , case课程 when'语文'then1when'数学'then2when'物理'then3end 
  
--SQL SERVER 2000 动态SQL。 
--调用系统表动态生态。 
declare@sqlvarchar(8000) 
select@sql=isnull(@sql+' union all ' , '' ) +' select 姓名 , [课程] = '+quotename(Name , '''') +' , [分数] = '+quotename(Name) +' from tb' 
from syscolumns 
where name! = N'姓名'and ID =object_id('tb') --表名tb,不包含列名为姓名的其它列 
orderby colid asc 
exec(@sql+' order by 姓名 ') 
  
--SQL SERVER 2005 动态SQL。 
select姓名 , 课程 , 分数 from tb unpivot (分数 for课程 in([语文] , [数学] , [物理])) t 
  
--SQL SERVER 2005 动态SQL,同SQL SERVER 2000 动态SQL。 
  
-------------------- 
/* 
问题:在上述的结果上加个平均分,总分,得到如下结果: 
姓名 课程   分数 
---- ------ ------ 
李四 语文   74.00 
李四 数学   84.00 
李四 物理   94.00 
李四 平均分 84.00 
李四 总分   252.00 
张三 语文   74.00 
张三 数学   83.00 
张三 物理   93.00 
张三 平均分 83.33 
张三 总分   250.00 
------------------ 
*/ 
  
select*from 
( 
 select姓名 as姓名 , 课程 ='语文' , 分数 =语文 from tb 
 unionall 
 select姓名 as姓名 , 课程 ='数学' , 分数 =数学 from tb 
 unionall 
 select姓名 as姓名 , 课程 ='物理' , 分数 =物理 from tb 
 unionall 
 select姓名 as姓名 , 课程 ='平均分' , 分数 =cast((语文 +数学 +物理)*1.0/3asdecimal(18,2)) from tb 
 unionall 
 select姓名 as姓名 , 课程 ='总分' , 分数 =语文 +数学 +物理 from tb 
) t 
orderby姓名 , case课程 when'语文'then1when'数学'then2when'物理'then3when'平均分'then4when'总分'then5end 

droptable tb 
【Bug已解决】zsh: command not found: claude 解决方案 方案适用场景推荐指数难度方案一:配置 npm 全局目录所有平台,长期使用⭐⭐⭐⭐⭐低方案二:修复 PATH 变量快速修复,不想改 npm 配置⭐⭐⭐⭐低方案三:重建软链接文件存在但链接断裂⭐⭐⭐中方案四:nvm 专属方案使用 nvm 管理多版本 Node.js⭐⭐⭐⭐低方案五:Windows 专属Windows 系统⭐⭐⭐⭐⭐低方案六:Homebrew 安装macOS 用户,npm 有问题⭐⭐⭐低根本原因。 阅读详情

相关推荐

三维模型转变为点云模型的好工具——CloudCompare使用小记

普通三维模型能够直观地展示物体的三维全貌,但是在一些场合需要将三维模型变为相应的点云模型进行展示,而使用激光雷达等传感器采集到的点云信息往往只能反应模型表面的情况,或是使用PCL库中的可执行文件进行转换,这两种操作较为麻烦。笔者最近就遇到了这样一个情况,找到了一个名叫CloudCompare(CC)的软件,能够支持将多种文件格式的三维模型转变为点云模型。以下将本人在使用过程中所使用到的一些操作简记下来供朋友们和将来的自己参考。 一、下载 CloudCompare是一款免费软件,其可以在CloudComp

hdlwyt的博客 2万+

sql行列互换问题

create table tb_student --create table(    sname varchar(20),    object varchar (20),    score int)goinsert tb_student select a,EN,89 union all --add data to table   select a,CH,78 union all  

fenghu89的专栏 777

ASReview:基于主动学习的AI文献筛选工具,提升科研效率

主动学习是机器学习的一个重要分支,其核心原理是让算法能够主动选择最有价值的数据进行标注,从而以更低的成本获得更好的模型性能。这一技术通过人机协作的闭环流程,显著提升了数据标注和模型训练的效率和精度。在工程实践中,主动学习尤其适用于数据标注成本高昂或数据类别不平衡的场景,例如医学影像分析、自然语言处理中的文本分类以及推荐系统的冷启动问题。通过优先标注模型最不确定的样本,它能够有效解决传统机器学习面临的冷启动和数据稀疏性挑战。本文聚焦的ASReview项目,正是将主动学习原理应用于系统文献综述这一具体场景,通过

weixin_28725959的博客 431

行列互换问题,怎么办?送你一个万能模版

【题目】下面是表名为cook的表要求查询结果如下:【解题思路】电影《女男变错身》中是男女互换身份这个题其实也是“互换身份”,叫做行列互换问题,就是将一维表转化为二维表。1.输出行列互换的...

公众号(猴子数据分析) 1319

PyTorch生成式人工智能(1)——神经网络与模型训练过程详解

在本节中,我们介绍了传统机器学习与人工神经网络间的差异,并了解了如何在实现前向传播之前连接网络的各个层,以计算与网络当前权重对应的损失值;实现了反向传播以优化权重达到最小化损失值的目标。并实现了网络的所有关键组成——前向传播、激活函数、损失函数、链式法则和梯度下降,从零开始构建并训练了一个简单的神经网络。

盼小辉丶的博客 1万+

【AutoSAR】【EcuM】ECU状态管理

目录 一、EcuM架构位置 ​二、EcuM功能介绍 三、EcuM状态机 1.STARTUP阶段 2、UP状态 3、shutdown状态 4、休眠状态 5、OFF状态 一、EcuM架构位置 EcuM模块位于系统服务层,如下图红色方框里; 二、EcuM功能介绍 EcuM本身它管理着ECU在STARTUP, RUN,OFF,SLEEP,WAKEUP状态之间的相互切换。 责所有BSW的初始化以及去初始化 和ComM协作来管理网络状态,在需要时关闭ECU 管理所有的唤醒事件,并且在需要时

专注汽车软件开发、AutoSAR、车载以太网、SOA、EE架构。 3354

sql语句-关于行列互换等问题的查询语句

1.表结构如下: 1991 1.1 21 1991 1.2 22 1991 1.3 23 1992 1.1 24 1992 1.2 25 1992 1.3 26 查出的结果为: 年份 1.1 1.2 1.3 1991 21 22 23 1992 24 25 26 [color=red]select year as '年份' , ma...

ljt122000的专栏 192

大模型安全-生成检测-事实核查-攻击-防御-思考-记忆-融合-语音相关研究 2025年版

本文整理了关于大模型安全领域的综合性资源,包括7篇综述论文、9个安全数据集以及5篇强化学习相关的安全研究论文。主要涉及大模型的对抗攻击、隐私保护、安全评估等方向,涵盖TruthfulQA、ToxiGen等知名数据集和TrustLLM、HarmBench等关键研究。资源包括知乎博主分享、arXiv预印本和顶会论文,并附有详细的中文讲解链接,为研究者提供了系统性的安全研究参考。

CSPhD-winston的博客 3584

oracle行列互换sql,解决Oracle行列转换问题的一个方法

不好意思,编译错误,可能是版本的问题其实,实现的方法很简单,请参考精华帖子下面是源文件 ,我是的数据库版本是9.2.0.1,OS为NT[PHP]---Author: Accelerator---Date: 2004-11-25create or replace type list_aggas object(total varchar2(4000),static functionODCIAg...

weixin_39969257的博客 160

20251121更新纷玩岛

【代码】20251121更新纷玩岛。

猫敷雪 1019

Qt QCustomPlot 图形库详解及使用

QCustomPlot 是一个开源的 Qt C++ 库,专门用于创建数据图表。易于集成到 Qt 项目中。支持多种图表类型,如折线图、散点图、条形图等。提供丰富的交互功能,如缩放、平移、选择和拖动。高度可定制,支持图形的各种样式设置。// 添加第一条曲线i < 101;++i) {// 设置曲线颜色// 添加第二条曲线i < 101;++i) {// 设置曲线颜色// 设置散点样式// 添加图例。

MusicScore的博客 764

优快云 SQL版常見問題之四--行列互換

/*--轉載請注明,謝謝--作者:  Paoluo--日期:  2007-08-31--用途:  將表中的列名轉為Type的數據*/--創建測試環境Create Table TEST(ID Int, A Int, B Int, C Int)--插入數據Insert TEST Select 1, 100, 90, 0Union All Select 2, 80, 85, 92Union Al

paoluo的专栏 1293

PCL 加权局部最优投影(WLOP)简化算法

WLOP算法是一种点云重采样方法,通过迭代优化实现点云均匀化和特征保留。算法包含数据项(加权平均位置保持几何特征)和正则化项(排斥邻近点实现均匀分布)两部分。代码实现基于PCL库,通过KD树加速邻域搜索,使用高斯权重函数计算点位置更新。参数包括输出点比例、邻域半径、正则化权重和迭代次数。该算法不依赖网格信息,适合处理大规模扫描数据的预处理优化。

点云侠的博客 631

asp.net怎么实现按条件查询_行列互换问题,怎么办?送你一个万能模版

【题目】下面是表名为cook的表要求查询结果如下:【解题思路】电影《女男变错身》中是男女互换身份这个题其实也是“互换身份”,叫做行列互换问题,就是将一维表转化为二维表。1.输出行列互换的表结构可以看出,需要输出的有5列,其中只有“年”这一列是表cook中原有的,其他4列(也就是2-5列:m1对应的是1月份、m2对应的是2月份、m3对应的是3月份、m4对应的是4月份)需要自己创建。select年,...

weixin_39736150的博客 319

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

sql 对groupby 取每个分组前_sql-面试题

复习一.简单查询查询姓"猴"的学生名2.查询名字最后一个字是猴的学生名单3.查询姓名中带猴的学生名单4.查询姓孟的老师个数二.汇总分析1.汇总查询(1)查询课程号为'0002'的总成绩(Sum求和函数)(2)查询选了课程的学生人数(count计数函数,注意去重)2.分组查询(1)查询各科成绩的最高分和最低分(分组)(2)查询每门课程被选修的学生数(3)查询男生,女生人数(按性别分组)3.分组后加筛...

weixin_39839018的博客 366

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

sql分组取出每组最大一条_SQL面试题

一.简单查询查询姓“孟”老师的个数二.汇总分析练习:汇总分析1.查询课程编号为“0002”的总成绩/*select查询结果(总成绩:sum) from哪张表(score) where查询条件(课程号0002) */ 2.查询选了课的学生人数/*select查询结果(学号去掉重复 学生人数:count) from哪张表(score) */练习:分组1.查询各科成绩最高和最低的分/*select查询结...

weixin_39571404的博客 5537

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

case oracel 子查询_SQL查询总结

一、简单查询查询姓孟的教师人数二、汇总分析查询课程编号为“0002”的总成绩查询选了课程的人数查询各科成绩最高和最低的分查询每门课程被选修的学生数查询平均成绩大于60分学生的学号和平均成绩查询至少选修两门课程的学生学号查询同名同姓学生名单并统计同名人数查询不及格的课程并按课程号从大到小排列查询每门课程的平均成绩,结果按平均成绩升序排序,平均成绩相同时,按课程号降序排列检索课程编号为“0004”且分...

weixin_39921224的博客 165

SQL行列互换

面试的时候遇到的数据库SQL问题,没写过,然后研究了一下,现将结果记录下来,方便以后查询。   题目1:将表tbltest1的行列互换   表结构: student     kemu  fenshu student1    语文    80 student1    数学    90 student1    英语    85 student2    语文    85 st

luyuncsd123的专栏 1301

图解SQL面试题 (学习笔记) 003多表查询----3

行列互换问题,怎么办? 【题目】 下面是表名为 cook 的表 要求查询结果如下: 叫做行列互换问题,就是将一维表转化为二维表。 找出连续出现 N 次的内容? 链家面试题:如何分析留存率? 二级标题 三级标题 四级标题 五级标题 六级标题 ...

weixin_56660268的博客 459

Hive函数面试题

##连续值问题 ##TopN问题 一.连续值问题 求连续7天登录的用户 原始数据 uid dt status 1 2019-07-11 1 1 2019-07-12 1 1 2019-07-13 1 1 2019-07-14 1 1 2019-07-15 1 1 2019-07-16 1 1 2019-07-17 1 1 2019-07-18 1 2 2019-07-11 1 2 2019-07-12 1 2 2019-07-13 0 2 2019-07-14 1 2 2019-

weixin_46267444的博客 275

sql concat函数_三、SQL面试题 错题整理

一、sqlzoo1-1 函数1、round1)查找南美洲(South America)的国家名称, 人口数以百万表示(1后面6个0), gpd以十亿表示(1后面9个0) 使用ROUND函数将值显示为两位小数select name,round(population/1000000,2),round(gdp/1000000000,2) from world where continent='Sout...

weixin_39985279的博客 517

Oracle 11g 行列互换 pivot 和 unpivot

Oracle 11g 行列互换 pivot 和 unpivot 在Oracle 11g中,Oracle 又增加了2个查询:pivot(行转列) 和unpivot(列转行) pivot 列转行 测试数据 (id,类型名称,销售数量),案例:根据水果的类型查询出一条数据显示出每种类型的销售数量。 SQL Code 1 2 3 4 5 6 7 ...

CWD950926的博客 570

如何用一条sql 查询出今天的数据条数和昨天数据条数_SQL题目总结

1.汇总分析/*分析思路select 查询结果 from 从哪张表中查找数据 where 查询条件group by 分组 having 查询条件 ...

weixin_39838758的博客 1221

SQL习题3

第二十题:怎么样抽取重复记录表:id name--------1 test12 test23 test34 test45 test56 test62 test23 test32 test26 test6查出所有有重复记录的数据,用一句sql 来实现create table D(id varchar (20),name varchar (20))insert into D values(1

paohui9527的专栏 3042
上一篇: SqlServer中quotename用法与实例
下一篇: 查询某个数在该数组中是否存在-函数
facefeather
博客等级 码龄15年 0粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值