经典SQL行列转换

基于FPGA的IIR数字滤波器设计 一种是在直接法的基础上,采用预见的算法,目的是提高系统的吞吐量(指对于网络、端口设备或者其他的设施,单位时间内成功传输数据的数量,比特、字节和分组是吞吐量常用的单位),带有预见算法编程实现的IIR数字滤波器有更多的优点,例如:数据传送速度快,效率高等等;设计模拟滤波器时,它的电路一般都很复杂,而且分析起来也很麻烦,电路的复杂性就决定了使用的器件必定很多,很复杂,就这一方面看来,数字滤波器的设计要更加简单灵活,并且模拟电路不容易改变系统的参数,它的性能还很容易受到温度环境的影响,使得噪声很大。 阅读详情
-- 经典SQL行列转换
-- http://www.programbbs.com/doc/4885.htm

/*
标题:普通行列转换(version 2.0)
说明:普通行列转换(version 1.0)仅针对sql server 2000提供静态和动态写法,version 2.0增加sql server 2005的有关写法。

问题:假设有张学生成绩表(tb)如下:
姓名 课程 分数
张三 语文 74
张三 数学 83
张三 物理 93
李四 语文 74
李四 数学 84
李四 物理 94
想变成(得到如下结果): 
姓名 语文 数学 物理 
---- ---- ---- ----
李四 74   84   94
张三 74   83   93
-------------------
*/

create table tb(姓名 varchar(10) , 课程 varchar(10) , 分数 int)
insert into tb values('张三' , '语文' , 74)
insert into tb values('张三' , '数学' , 83)
insert into tb values('张三' , '物理' , 93)
insert into tb values('李四' , '语文' , 74)
insert into tb values('李四' , '数学' , 84)
insert into tb values('李四' , '物理' , 94)
go

--SQL SERVER 2000 静态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 2000 动态SQL,指课程不止语文、数学、物理这三门课程。(以下同)
declare @sql varchar(8000)
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 2005 静态SQL。
select * from (select * from tb) a pivot (max(分数) for 课程 in (语文,数学,物理)) b

--SQL SERVER 2005 动态SQL。
declare @sql varchar(8000)
select @sql = isnull(@sql + ',' , '') + 课程 from tb group by 课程
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 分数 else 0 end) 语文,
  max(case 课程 when '数学' then 分数 else 0 end) 数学,
  max(case 课程 when '物理' then 分数 else 0 end) 物理,
  cast(avg(分数*1.0) as decimal(18,2)) 平均分,
  sum(分数) 总分
from tb
group by 姓名

--SQL SERVER 2000 动态SQL。
declare @sql varchar(8000)
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(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) as decimal(18,2)) 平均分 , sum(分数) 总分 from tb group by 姓名) n
where m.姓名 = n.姓名

--SQL SERVER 2005 动态SQL。
declare @sql varchar(8000)
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(18,2)) 平均分 , sum(分数) 总分 from tb group by 姓名) n
where m.姓名 = n.姓名')

drop table tb   

------------------
------------------

/*
问题:如果上述两表互相换一下:即表结构和数据为:
姓名 语文 数学 物理
张三 74  83  93
李四 74  84  94
想变成(得到如下结果): 
姓名 课程 分数 
---- ---- ----
李四 语文 74
李四 数学 84
李四 物理 94
张三 语文 74
张三 数学 83
张三 物理 93
--------------
*/

create table tb(姓名 varchar(10) , 语文 int , 数学 int , 物理 int)
insert into tb values('张三',74,83,93)
insert into tb values('李四',74,84,94)
go

--SQL SERVER 2000 静态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 2000 动态SQL。
--调用系统表动态生态。
declare @sql varchar(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,不包含列名为姓名的其它列
order by 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 
 union all
 select 姓名 as 姓名 , 课程 = '数学' , 分数 = 数学 from tb
 union all
 select 姓名 as 姓名 , 课程 = '物理' , 分数 = 物理 from tb
 union all
 select 姓名 as 姓名 , 课程 = '平均分' , 分数 = cast((语文 + 数学 + 物理)*1.0/3 as decimal(18,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

--> 生成测试数据: #DB_info
if object_id('tempdb.dbo.#DB_info') is not null drop table #DB_info
create table #DB_info (sid int,name nvarchar(4),sex nvarchar(2))
insert into #DB_info
select 1,'李明','男' union all
select 2,'王军','男' union all
select 3,'李敏','女'

--> 生成测试数据: #db_scores
if object_id('tempdb.dbo.#db_scores') is not null drop table #db_scores
create table #db_scores (sid int,type nvarchar(4),scores int)
insert into #db_scores
select 1,'语文',80 union all
select 1,'数学',90 union all
select 2,'语文',85 union all
select 2,'数学',90 union all
select 3,'语文',75 union all
select 3,'数学',85

declare @sql nvarchar(4000)
set @sql='select a.sid,a.name,a.sex'
select @sql=@sql+',max(case when b.type='''+type+''' then b.scores else 0 end) ['+type+']'
from (select distinct type from #db_scores) t

exec (@sql+' from #DB_info a left outer join #db_scores b on a.sid=b.sid group by a.sid,a.name,a.sex')

/*
sid         name sex  数学          语文
----------- ---- ---- ----------- -----------
1           李明   男    90          80
2           王军   男    90          85
3           李敏   女    85          75

(3 行受影响)
*/
CosyVoice 本地部署详细教程 手把手小白教程 本文提供了详细的CosyVoice本地部署教程,强调了避免中文名称和空格的重要性,并列出了必要的软件安装步骤,包括CUDA、cuDNN、Git和Miniconda。教程涵盖了从检查CUDA版本到下载模型和运行模型的全过程,确保用户能够顺利部署并使用CosyVoice。 阅读详情

相关推荐

从手机到自动驾驶:MIPI-CSI2协议演进史与车规级改造要点

本文追溯了MIPI-CSI2协议从智能手机摄像头到自动驾驶核心传感器的演进历程。重点剖析了该协议在车规级改造中面临的严苛挑战,包括物理层稳定性、EMC防护、功能安全与数据可靠性等关键要点,并探讨了其在多传感器融合与高带宽实时传输中的工程实践。

weixin_28318011的博客 278

mssql行转列,列转行

一、行转列: select max(case OptionKey when 'A' then OptionCont else null end) A, max(case OptionKey when 'B' then OptionCont else null end) B, max(case OptionKey when 'C' then OptionCont else null end) C, max(case OptionKey when 'D' then OptionCont else nu

黄瓜炒鸡蛋的博客 2258

npm install failed如何办?

上网搜索,说是网络配置不太对。按照如下几步,保证解决问题。在运行npm install指令时,出现如下错误。

xiezhipu的博客 862

经典SQL----行列转换

 /*标题:普通行列转换(version 2.0)说明:普通行列转换(version 1.0)仅针对sql server 2000提供静态和动态写法,version 2.0增加sql server 2005的有关写法。问题:假设有张学生成绩表(tb)如下:姓名 课程 分数张三 语文 74张三 数学 83张三 物理 93李四 语文 74李四 数学 84李四 物理 94想变成(得到如下结果): 姓

深海狂鲨 1707

SQL行列转换

本文主要介绍SQL常见的行列转换

Hudas的博客 3万+

sql分割以,拼接的字符转换成临时表

SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO Create FUNCTION [dbo].[F_Split]  (      @SplitString nvarchar(max),  --源字符串      @Separator nvarchar(10)=' '  --分隔符号,默认为空格  )  RETURNS @SplitStrings...

qq_38225873的博客 589

关于将从SQL中查到的数据进行横向展示

在业务中同事碰到一个业务需求,

wsMonster的博客 2038

行列转换经典SQL语句

1.--行列转换原表: 姓名 科目 成绩 张三 语文 80 张三 数学 90 张三 物理 85 李四 语文 85 李四 物理 82 李四 英语 90 李四...

weixin_30617561的博客 101

[转]行列转换经典SQL语句

http://blog.sina.com.cn/s/blog_3d7bed650100c4ia.html 在企业应用中,经常会开发报表系统,而在报表中又经常用到行列转换,这里有一个经典的应用实例: 原表: 姓名科目 成绩 张三语文80 张三 数学 90 ...

weixin_30695195的博客 119

SQL行列转换经典sql操作

行列转换经典SQL语句1.--行列转换原表:   姓名     科目   成绩           张三     语文    80           张三     数学    90           张三     物理    85           李四     语文

ZIrving的专栏 784

mssql 行列转换

mssql 行列转换

xzfyes的博客 707

【精】mysql行转列的7种方法及列转行

假如userid =‘001’ and subject=‘语文’ 的记录有两条,则此时SUM() 的值将会是这两条记录的和,同理,使用Max()的值将会是这两条记录里面值最大的一个。比较抽象,难以理解。(1)SUM() 是为了能够使用GROUP BY根据userid进行分组,因为每一个userid对应的subject="语文"的记录只有一条,所以SUM() 的值就等于对应那一条记录的score的值。这里将每个userid对应的多个科目的成绩查出来,通过UNION ALL将结果集加起来,达到上图的效果。

无知是恶 1万+

sql server 纵向表横向输出的实现

<br />有时候,我们经常需要通过纵向存储的数据,在做报表的时候,横向输出显示出来。<br />最典型的例子:<br />问卷系统中的存储答案的表,存储的数据类似于(存储形式):<br /> <br /> c_UserId (用户编号)c_QuestionId(问题编号)c_Item(答案)<br />--------------------------------------------------------------------------------------<br />11A<br /> <

asrain的专栏 2445

mssql 数据库表行转列,列转行 比较经典

--行列互转 /****************************************************************************************************************************************************** 以学生成绩为例子,比较形象易懂 整理人:中国风(Roy) 日期:2008.06....

weixin_30363981的博客 344

SQL 如何行转列和列转行?

行转列和列转行是数据处理中常见的操作,可以使用 SQL 中的各种函数和语句来实现。

NZC2237的博客 930

Mysql中行转列和列转行

一、行转列 即将原本同一列下多行的不同内容作为多个字段,输出对应内容。 建表语句 DROP TABLE IF EXISTS tb_score; CREATE TABLE tb_score( id INT(11) NOT NULL auto_increment, userid VARCHAR(20) NOT NULL COMMENT ‘用户id’, subject VARCHAR(20) COMME...

AIfurture的博客 683

北京市电子政务运维管理规范 (2).pdf

北京市电子政务运维管理规范 (2).pdf北京市电子政务运维管理规范 (2).pdf北京市电子政务运维管理规范 (2).pdf北京市电子政务运维管理规范 (2).pdf北京市电子政务运维管理规范 (2).pdf北京市电子政务运维管理规范 (2).pdf北京市电子政务运维管理规范 (2).pdf北京市电子政务运维管理规范 (2).pdf

【电力系统控制】基于超螺旋滑模控制的光伏MPPT算法实现与仿真:快速响应无抖振的最大功率点跟踪系统设计(含详细代码及解释)

内容概要:该论文提出了一种基于超螺旋二阶滑模控制算法的光伏系统最大功率点跟踪(MPPT)方法。通过设计无抖振的滑模控制器,将离散控制率转化为高阶连续控制量,解决了传统滑模控制中的抖振问题。论文详细分析了光伏电池特性和Boost电路原理,并通过Matlab/Simulink建立了仿真模型。仿真结果显示,该方法在光照和温度变化条件下能够快速跟踪最大功率点,相比传统算法具有更强的鲁棒性和更高的稳定性。适用人群:从事光伏系统研究与开发的技术人员、高校教师及研究生。使用场景及目标:①适用于需要提高光伏系统效率的研究项目;②用于验证新型控制算法的有效性和鲁棒性;③帮助理解超螺旋滑模控制在光伏MPPT中的应用原理及其实现过程。其他说明:论文不仅提供了详细的理论分析,还附有完整的Python代码实现,便于读者进行复现和进一步研究。此外,文中还探讨了该算法与其他传统MPPT方法(如电导增量法)的性能对比,以及在不同环境扰动下的表现,为实际工程应用提供了有价值的参考。

上一篇: 统计,求指定时段内的平均值、最大(最小)值,以及最值出现的时刻
下一篇: 开始学习C#数据库应用编程
jacksu19
博客等级 码龄24年 29粉丝 35原创
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值