范文健康探索娱乐情感热点
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

死磕SQL行转列汇总(全网最全最详细)

  SQL行转列汇总
  阅读目录 一. 基础语法: 二. 典型实例 一. 基础语法:
  PIVOT  用于将列值旋转为列名(即行转列),在 SQL Server 2000可以用聚合函数配合CASE语句实现
  PIVOT 的一般语法是:PIVOT(聚合函数(列) FOR 列 in (…) )AS P
  注意:PIVOT、UNPIVOT是SQL Server 2005 的语法,使用需修改数据库兼容级别(在数据库属性->选项->兼容级别改为 90 )
  SQL2008 中可以直接使用
  完整语法: table_source  PIVOT(  聚合函数(value_column)  FOR pivot_column  IN()  )
  View Code
  UNPIVOT  用于将列明转为列值(即列转行),在SQL Server 2000可以用UNION来实现完整语法:  table_source  UNPIVOT(  value_column  FOR pivot_column  IN()  )二. 典型实例2.1 行转列2.1.1建立表格IF OBJECT_ID("tb") IS NOT NULL DROP TABLE tb  go  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  SELECT * FROM tb  go
  姓名 课程 分数
  ---------- ---------- -----------
  张三 语文 74
  张三 数学 83
  张三 物理 93
  李四 语文 74
  李四 数学 84
  李四 物理 94 2.1.2 使用SQL Server 2000静态SQLSELECT 姓名,   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 姓名2.1.3 使用SQL Server 2000动态SQL--SQL SERVER 2000动态SQL,指课程不止语文、数学、物理这三门课程。(以下同)  --变量按sql语言顺序赋值  declare@sqlvarchar(500)  set@sql="select姓名"  select@sql=@sql+",max(case课程when """+课程+""" then分数else 0 end)["+课程+"]"  from(selectdistinct课程fromtb)a--同from tb group by课程,默认按课程名排序  set@sql=@sql+" from tb group by姓名"  exec(@sql)     --使用isnull(),变量先确定动态部分  declare@sqlvarchar(8000)  select@sql=isnull(@sql+",","")+" max(case课程when """+课程+""" then分数else 0 end) ["+课程+"]"  from(selectdistinct课程fromtb)asa        set@sql="select姓名,"+@sql+" from tb group by姓名"  exec(@sql)2.1.4使用SQL Server 2005静态SQLSELECT * FROM tb pivot( MAX(分数) FOR 课程 IN (语文,数学,物理))a
  姓名 语文 数学 物理
  ---------- ----------- ----------- -----------
  李四 74 84 94
  张三 74 83 93 2.1.5使用SQL Server 2005动态SQL--使用stuff()  DECLARE @sql VARCHAR(8000)  SET @sql=""  --初始化变量 @sql  SELECT @sql= @sql+"," + 课程 FROM tb GROUP BY 课程 --变量多值赋值  SET @sql= STUFF(@sql,1,1,"")--去掉首个","  SET @sql="select * from tb pivot (max(分数) for 课程 in ("+@sql+"))a"  PRINT @sql  exec(@sql)  --或使用isnull()  DECLARE @sql VARCHAR(8000)  --获得课程集合  SELECT @sql= ISNULL(@sql+",","")+课程 FROM tb GROUP BY 课程             SET @sql="select * from tb pivot (max(分数) for 课程 in ("+@sql+"))a"  exec(@sql)2.2 行转列结果加上总分、平均分2.2.1SQL Server 2000静态SQL加总分、平均分--SQL SERVER 2000静态SQL  select姓名,  max(case课程when"语文"then分数else0end)语文,  max(case课程when"数学"then分数else0end)数学,  max(case课程when"物理"then分数else0end)物理,  sum(分数)总分,  cast(avg(分数*1.0)asdecimal(18,2))平均分  fromtb  groupby姓名
  姓名 语文 数学 物理 总分 平均分
  ---------- ----------- ----------- ----------- -----------
  李四 74 84 94 252 84.00
  张三 74 83 93 250 83.33 2.2.2 SQL Server 2000动态SQL加总分、平均分--SQL SERVER 2000动态SQL  declare@sqlvarchar(500)  set@sql="select姓名"  select@sql=@sql+",max(case课程when """+课程+""" then分数else 0 end)["+课程+"]"  from(selectdistinct课程fromtb)a  set@sql=@sql+",sum(分数)总分,cast(avg(分数*1.0) as decimal(18,2))      平均分from tb group by姓名"  exec(@sql)2.2.3SQL Server 2005静态SQL加总分、平均分SELECT  m.* ,         n.总分 ,         n.平均分 FROM    ( SELECT    *           FROM      tb PIVOT( MAX(分数) FOR 课程 IN ( 语文, 数学, 物理 ) ) a         ) m ,         ( SELECT    姓名 ,                     SUM(分数) 总分 ,                     CAST(AVG(分数 * 1.0) AS DECIMAL(18, 2)) 平均分           FROM      tb           GROUP BY  姓名         ) n WHERE   m.姓名 = n.姓名2.2.4SQL Server 2005动态SQL加上总分、平均分--使用stuff() DECLARE @sql VARCHAR(8000)  SET @sql = ""   --初始化变量@sql  SELECT  @sql = @sql + "," + 课程 FROM    tb GROUP BY 课程 --变量多值赋值  --同select @sql = @sql + ","+课程 from (select distinct 课程 from tb)a  SET @sql = STUFF(@sql, 1, 1, "") --去掉首个","  SET @sql = " select m.* , n.总分,n.平均分 from  (select * from (select * from tb) a pivot (max(分数) for 课程 in (" + @sql     + ")) b) m ,  (select 姓名,sum(分数)总分, cast(avg(分数*1.0) as decimal(18,2)) 平均分 from tb group by 姓名) n  where m.姓名= n.姓名"  EXEC(@sql)    --或使用isnull()  DECLARE @sql VARCHAR(8000)  SELECT  @sql = ISNULL(@sql + ",", "") + 课程 FROM    tb GROUP BY 课程  SET @sql = "select m.* , n.总分,n.平均分 from  (select * from (select * from tb) a pivot (max(分数) for 课程 in (" + @sql     + ")) b) m ,  (select 姓名,sum(分数)总分, cast(avg(分数*1.0) as decimal(18,2)) 平均分 from tb group by 姓名) n  where m.姓名= n.姓名"  EXEC(@sql)2.3 列转行2.3.1建立表格IF OBJECT_ID("tb") IS NOT NULL DROP TABLE tb go  CREATE TABLE tb(姓名 VARCHAR(10),语文 INT,数学 INT,物理 INT)  INSERT INTO tb VALUES("张三",74,83,93)  INSERT INTO tb VALUES("李四",74,84,94)  go  SELECT * FROM tb
  姓名 语文 数学 物理
  ---------- ----------- ----------- -----------
  张三 74 83 93
  李四 74 84 94 2.3.2使用SQL Server 2000静态SQL--SQL SERVER 2000静态SQL。  select*from  (   select姓名,课程="语文",分数=语文fromtb   unionall   select姓名,课程="数学",分数=数学fromtb   unionall   select姓名,课程="物理",分数=物理fromtb  ) t  orderby姓名,case课程when"语文"then1when"数学"then2when"物理"then3end
  姓名 课程 分数
  ---------- ---- -----------
  李四 语文 74
  李四 数学 84
  李四 物理 94
  张三 语文 74
  张三 数学 83
  张三 物理 93 2.3.2使用SQL Server 2000动态SQL--SQL SERVER 2000动态SQL。  --调用系统表动态生态。  declare@sqlvarchar(8000)  select@sql=isnull(@sql+" union all ","")+" select姓名, [课程]="  +quotename(Name,"""")+" , [分数] = "+quotename(Name)+" from tb"  fromsyscolumns  whereName!="姓名"andID=object_id("tb")--表名tb,不包含列名为姓名的其他列  orderbycolid  exec(@sql+" order by姓名")  go   2.3.3使用SQL Server 2005静态SQL--SQL SERVER 2005动态SQL  SELECT  姓名 ,         课程 ,         分数 FROM    tb UNPIVOT ( 分数 FOR 课程 IN ( [语文], [数学], [物理] ) ) t 2.3.4使用SQL Server 2005动态SQL--SQL SERVER 2005动态SQL  DECLARE @sql NVARCHAR(4000)  SELECT  @sql = ISNULL(@sql + ",", "") + QUOTENAME(name) FROM    syscolumns WHERE   id = OBJECT_ID("tb")         AND name NOT IN ( "姓名" ) ORDER BY colid  SET @sql = "select 姓名,[课程],[分数] from tb unpivot ([分数] for [课程] in(" + @sql     + "))b"  EXEC(@sql)
  最后给大家分享Spring系列的学习笔记和面试题,包含spring面试题、spring cloud面试题、spring boot面试题、spring教程笔记、spring boot教程笔记、最新阿里巴巴开发手册(63页PDF总结)、2022年Java面试手册。一共整理了1184页PDF文档。私信博主(777)领取,祝大家更上一层楼!!!
  原文作者:王思明
  原文出处:http://www.cnblogs.com/maanshancss/

一加10pro和iQOO9Pro相比较,该如何选?答案来了作为两款同样搭载骁龙8的旗舰机型,价格有又相差无几,而且都有不错的游戏体验,确实让很多人纠结。那么作为一名数码博主,我也谈谈我的一些看法,希望对大家的选择有所帮助。当然各人的侧重点iPhone15渲染图曝光留边前摄滚轮音量键,还有144Hz高刷谁能想到,距离iPhone14系列的正式发布还有5个月左右,网上已经有iPhone15系列的相关消息陆续被扒出,那么iPhone15是你理想中的样子吗?据网上流传的渲染图来看,iP搜狐直播靠张朝阳撑起内容供给侧该如何改善羊城晚报财经评论员戚耀琪媒体报道,4月12日,美国证券交易委员会(SEC)再将搜狐金融壹账通等12家中概股公司加入预摘牌名单,这是自3月以来第五批被纳入名单的中概股公司。如果确定摘如何在Bash中将字符串计算为数字?就像Linux中的一切都是文件一样,bash中的一切都是字符串。从技术上讲,Bash中没有数据类型,本质上,Bash变量只是字符串。当您尝试在bash中进行算术运算时,这会产生问题外媒中国的芯片之路走对了?Intel和AMD也跟进了据外媒消息,近日Intel和AMD也表示要支持RiscV架构芯片,两大公司纷纷表示将投入研发RiscV架构的芯片。这对中国芯片界来说无疑是个令人鼓舞的好消息,中国很早就决定全力推进高通联发科芯片爆发漏洞,安卓手机几乎全中招Android手机爆发最新安全漏洞,根据CheckPoint最新研究发现,黑客会根据苹果研发的老旧的音乐编码格式,远端操控手机,全球超过三分之二的Android手机都恐遭殃。Che5月11日谷歌施行新政策,通话录音功能将被永久终止?通话录音功能对于众多的国行手机用户来说,是一个非常实用的预装功能。因此,在看到这个标题时可能会引起许多人的担心与不安。因各个国家与地区的政策不同,有些地区是不允许使用通话录音功能的华为儿童智能手表3到手价248元对于家长来说,如何保证宝宝的安全是头等大事,所以很多父母会为购买了儿童用智能手表,可以通过手表发送的信息随时关注宝宝的各种转态。在京东商城华为官方旗舰店,华为推出的儿童电话手表3代日本将量子技术作为国家间争霸的核心,今年建首台可超高速计算的国产量子计算机共同社4月22日报道,日本政府的综合创新战略推进会议(主席官房长官松野博一)22日对于定位为重要技术的人工智能(AI)和量子技术,敲定了将推进研究和实用化的新战略。把处理电子和光等C函数返回指向各种内存分区的各类指针当函数返回一个指针时,不能返回指向被调函数自己栈帧上的局部变量的空间,但可以返回指向主调函数的栈帧上的局部变量的空间(参数指针指向的空间)。函数不能返回数组和函数,但可以返回数组指带你走进VR的大门,七彩虹全新CVN主板,一个令人神往的虚拟世界一提到VR(虚拟现实),很多喜欢数码的小伙伴都不会陌生,但如果你问问身边的大多数人,他们肯定是一头雾水,虽然不会问出能不能吃?这样的问题,但也不会有什么令人深刻概念。VR经历这么多
抢救患者剪坏衣服事情后,这些网络段子火了!导读抢救患者剪坏衣服丢掉资产,被家族索赔的事情之后,一些网络段子火了!1医师现在只能保一个,你是患者我保大人医师不,我是问你保命仍是保衣服?患者2护士主任,患者心跳骤停了主任抢救!鱼刺卡喉咙怎么办?这个方法救了100万人!建议收藏如果白叟或小孩有异物卡在了嗓子,呈现窒息呼吸困难呛咳甚至呼吸骤停,千万别拍背或许用手指伸入嗓子去取,由于这样不只没有作用,并且会使异物更伸入呼吸道!今日要和我们聊聊一种专门抵挡食物用37组数学兴趣动图,了解初中数学定理!学习本来能够很轻松!关于初中阶段的学生来说,初中比较头疼的就是数理化,而数理化中数学又不像物理和化学那么能够做试验,处处累积着核算和证明,所以显得特别单调。关于数学定理的了解,其实能够很轻松,不信,就看到我大肚子了就会想像到我被人那个了段子1一次历史考试,问1966年至1999年发生了哪三件大事。一奇葩同学是这样答复的1969年,我爸出生了1972年我妈出生了1995年,一个平地风波,神一般的人物我诞生了!然后这比亚迪全系车型共同发力,三季度累计销量达20万比亚迪乘用车随着新能源汽车市场的不断发展,其品牌也呈现着上升趋势,尤其是连续几个月的销量上涨,让人们见识到了该国产品牌的实力。比亚迪乘用车在9月的全系销售数据达到了79037辆左右比亚迪整合精华开创e平台3。0智能电动汽车难题破灭关于比亚迪这款汽车品牌,相信消费者肯定不陌生。从新能源汽车市场来看,比亚迪是当之无愧的领头羊。比亚迪在整个新能源汽车市场处于前列,即便是国际上也是前几名的存在。尤其是八月销量公布以斯诺登泄露美国计划,逃亡7年终得俄罗斯庇佑,美帝的卖国贼恰是人民的卫士在美国威胁之下,普京毅然收留斯诺登七年,斯诺登是美国前CIA成员之一,他揭露了美国的棱镜计划,遭到了美国政府的通缉之后只好逃往俄罗斯,现在是斯诺登在俄罗斯逃亡的第七个年头。有人认为鸿蒙不是安卓不是安卓,你真的了解安卓系统和鸿蒙系统的区别吗?近日,有很多朋友问小王,鸿蒙系统是不是就是换了一个外壳的安卓系统呢?其实我们都知道任何一家手机生产商,除苹果以外,它们除了制造出了硬件不一样以外,它思想核心还是基于谷歌的安卓系统。工信部要求9月17号各平台解除网址屏蔽,开放私域流量最后期限了,各位大佬,请解除网址屏蔽吧,从利益来说,私域流量肯定是对企业好,利润更高,但是从广罗大众的需求和实用体验来说,还是开放更好,这样可以打破互联网的垄断,支持一些有创新的企爆料!荣耀已经获得了微软的支持,中国首发预装win10系统近日,就在12月24日晚荣耀宣布与微软签署全球PC合作协议,荣耀将在全球范围内采用微软windows10系统作为荣耀笔记本电脑的官方操作系统。荣耀还表示将在下个月发布下一代magi想知道华为Hicar的适配车型吗?老司机们表示早已饥渴难耐提到华为无论是国内还是国外,可以说是无人不知无人不晓。不管在5G通信上的领先,还是移动手机业务的突飞猛进,这都让华为的名气越做越大,在成为国人骄傲的同时,也成为竞争对手的重点打击对