SQL知识点之列转行Unpivot函数

来源:脚本之家  责任编辑:小易  

SELECT *,STUFF((SELECT ','+人员 FROM (SELECT DISTINCT 人员 FROM 表名 WHERE 计划=T1.计划 AND 人员 IS NOT NULL AND LEN(RTRIM(人员))>0) T2 FOR XML PATH('')),1,1,'') FROM(SELECT DISTINCT 计划 FROM 表名)T1

前言

这是总结SQL知识点的第二篇文章,一次只总结一个知识点,尽量说明白。上次我们谈到行转列,用的是Pivot函数,这次我们来谈谈Unpivot函数。(这里是用的数据库是SQLSERVER,与其他数据库是类似的,大家放心看就好)

不同人的uuid是不一样的吗? select(select z from tabname aa where zmc='姓名' and aa.uuid = a.uuid ) 姓名,(select z from tabname aa where zmc='年龄' and aa.uuid = a.uuid ) 年龄,(select z from tabname aa where zmc='英文名称' and a

先看一个小问题CustomerCustomer

select * from A_14072201 ID USERID46859 3813046859 88846811 3813046811 3776146470 3783646470 3783646430 3783646430 37836select ID,USERID from A_14072201 where ID in (select ID from (select ID,USERID from A_14072201 group by ID,

在这张图中,表示的是顾客用不同手机号给Phone1、Phone2、Phone3拨打电话的情况,但是机灵的你,想变个花样来看看,比如下面这样的。

第一:你的时间维度表基本没有意义,微软SSIS中心认为时间维度至少由日期构成主键。可以认为是最小基本业务颗粒。 来个Sample,更复杂的在我空间里。但是道理是一样的。都是借助动态SQL和一些函数。 ------------------------------------------

UnpivotUnpivot

静态脚本: select '收入' as 项目 , case when 项目='一厂本月' then 收入 else null end as 一厂本月 , case when 项目='一厂本年' then 收入 else null end as 一厂本年 , case when 项目='二厂本月' then 收入 else null end as 二厂本月 ,

大家想想看如何实现呢?想下,2分钟后再看哟

对于这个问题,我先不给结论,让我们一起来思考一下吧。鸡蛋的质量大概是50克,也就是0.05千克。在50%的光速下,鸡蛋的运动质量会增加,但增加的幅度不大,大概增加到原来的1.4倍。那么,这个时候,我们认为鸡蛋的运动质量是0.07千克。从这里可以看出,50%的光速并不可怕,可怕的是99%以上的光速。如果你想知道运动质量与静止质量之间的联系,请查看相对论的书。现在,我们来计算一下鸡蛋的动能。在这个情况下,我们可以继续使用牛顿力学的动能公式。计算的结果是0.315乘10的16次方焦耳。这个动能撞到地球上,地球会被击穿吗?这个是不会的,因为鸡蛋太软,根本无法撞碎地球上的岩石,而且鸡蛋一旦进入太平洋或者

先创建数据

老人在咽气之前,从小到大的所有事情都会出现在眼前。人死的时候,六根渐渐坏死。耳根废了,眼根坏了。顿时就到了一种无闻无视的情况,生大恐怖,所以流下恐惧的眼泪。之前和粉丝聊到这个话题的时候,他给我讲了一个发生在自己身上的故事。父亲弥留之际时,口张的很大,喉咙里面有一口浓痰看得清清楚楚,眼泪直流,看样子非常痛苦,就是没一点力气咳出,眼泪也收不住,看着他难受的样子心如刀绞,我口对口的要给他吸痰,他拼尽最后一点力气闭上嘴巴从我嘴上挪开,我知道那是给我最后的一份爱。以后再也没有爱我的爸爸了。人死后并没有完全离开肉体,而且这段世间内大脑会回忆自己所做的所有的事情,当他意识到自己人生中犯下那么多罪恶的事情后,

CREATE TABLE dbo.CustomerPhones ( CustomerID INT PRIMARY KEY, -- FK Phone1 VARCHAR(32), Phone2 VARCHAR(32), Phone3 VARCHAR(32) ); INSERT dbo.CustomerPhones (CustomerID, Phone1, Phone2, Phone3) VALUES (1,'705-491-1111', '705-491-1110', NULL), (2,'613-492-2222', NULL, NULL), (3,'416-493-3333', '416-493-3330', '416-493-3339'); select * from dbo.CustomerPhones

一位邵阳的朋友告诉我:1992年他们那的山里有一个十多亩水面的山塘,深有八米多,有人去洗澡被淹死了,说是“水猴子”害死的。他的家属找了三十多人,4台大功率抽水机曰夜不停,用3天3夜的时间硬是把那山塘里的水抽干了。山塘的底部没有什么淤泥,是许多石头,在一块大石头的下面发现一个洞,洞口小,很深,那就是“水猴子”的窝,一群人用炸药把石头和洞口彻底炸开,“水猴子”当然也被炸死。不少人亲眼见到了血肉模糊的“是猴子”尸体,和上面我所描述的一样。当地认为这是很邪气的东西,放火烧掉了它的尸体并对外界三缄其口。后有当地村民说是一种水怪,生活在我们的身边,人们常说他是:水鬼俗名叫:“水猴”,专门吸人鲜血为食,在河

查看数据如下:

感谢邀请,我一定要推荐2本。我要先说下为什么推荐这两本,这两本都算是言情,如果说要改变电影或电视剧,最好的题材就是女性向,言情类。可以看看之前最火的电视剧几乎上都是女性观众最多。这两本书都是好版权,故事内核过硬,粉丝众多。当然,想要这两个影视剧版权的也可以联系我哈1、阮陈恩静作者:吕亦涵,现象级畅销书作家,当红言情小天后。代表作《阮陈恩静》畅销50万册,各大论坛数十万粉丝发帖热议。月销量80万册的杂志8期连载,年销量50万册,当当青春言情畅销榜第一名,当当好书榜年度重磅作品一个关于美食、酒店和商业竞争的悬疑爱情故事。香港阮氏酒店总裁阮东廷因女友何秋霜患尿毒症无法生育,被母亲强迫分开,娶了在厦门

DataDataUpivot 实现行转列

select * from dbo.CustomerPhones -----数据源 unpivot ( Phone FOR Phones IN (Phone1, Phone2, Phone3) ##Phone1、Phone2、Phone3这些列的结果转为行上的结果,成为一列, ##并且有了新的列名为Phone ) up

结果如下:

ResultResult

参考文献:

1.Use SQL Server's UNPIVOT operator to help normalize output

2.SQL之行转列Pivot用法

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。

扩展阅读,根据您访问的内容系统为您准备了以下内容,希望对您有帮助。

sql server 列转行

SQL Server 2005之后支持pivot关键字。

select year,[1],[2],[3],[4]

from 表A

pivot(max(num) for [month] in ([1],[2],[3],[4])) as pvt

SQL Server 2000以及之前版本,可以参考imlees的方法。

sql 列转行

select case when tab1.tutorld is null then tab2.tutorld else tab1.tutorld end,tab1.菜品1,tab2.菜品2 from 

(select tutorld,dishname as '菜品1' from 表格名称 where dishtype = 1) tab1 

full join 

(select tutorld,dishname as '菜品2' from 表格名称 where dishtype = 2) tab2 

on tab1.tutorld = tab2.tutorld

 ;

sql 列转行

通用的方法用union,不同的数据库可能有对应的方法,比如sqlserver的unpovit

select 'A' key,A value from tabname 

union

select 'B' key,B value from tabname 

union

select 'C' key,C value from tabname 

union

select 'D' key,D value from tabname 

union

select 'E' key,E value from tabname追问除了union还有别的办法吗?因为我的字段列有10多个,union的话太大了?

PS:我用的是达梦数据库(类似于oracle)追答没有用过这个数据库,你可以找找这个数据库的使用手册了。

sql列转行,如何把表转化为这个结果一共一行 一列.如何实现.

通用的办法是用动态sql解决:

declare @sql varchar(2000);

set @sql='select ''';

select @sql=@sql+列名+',' from 表名;

select @sql=left(@sql,len(@sql)-1)+''''

exec(@sql);

此外,SQL Server2005以上版本可以用XML Path解决。

SELECT 列名+',' FROM 表名 FOR XML PATH('')

这样将直接得到'a,b,c,d,d,e,',需要进一步处理去掉最后的逗号

更多追问追答追问不愧是八级啊 真有办法.

就是不知道java页面可以执行含有declare或xml的sql语句吗追答应该没有问题。实在不行就把这些语句放到存储过程里吧,肯定没有问题了。追问请解释下select @sql=left(@sql,len(@sql)-1)+'''' 的含义

第二

jsp提示不允许 CURSOR 语句中包含 FOR XML 子句。是什么意思

sql列转行,统计数量

你这个要拆分行,然后统计重复的行,统计重复的行容易的,拆分的话用如下代码:

--建立表Tab

Create table Tab([Col1] int,[COl2] nvarchar(5))

--插入数据,分隔符为“;”

Insert Tab

select 1,N'a;b;c' union all

select 2,N'd;e' union all

select 3,N'f'

Go

select * from tab

select

a.COl1,b.Col2

from

--转化为XML格式数据,其中将“,”替换为“</v><v>”

(select Col1,COl2=convert(xml,'<root><v>'+replace(COl2,';','</v><v>')+'</v></root>') from Tab)a

outer apply

--取出xml每行里的数据

(select Col2=c.v.value('.','nvarchar(100)') from a.COl2.nodes('/root/v')c(v))b

select COl2=convert(xml,'<root><v>'+replace(COl2,';','</v><v>')+'</v></root>') from Tab

drop table tab

  • 本文相关:
  • mysql 行转列和列转行实例详解
  • mysql 列转行,合并字段的方法(必看)
  • mssql 数据库表行转列,列转行终极方案
  • sql行转列和列转行代码详解
  • mysql 列转行的技巧(分享)
  • sql行转列、列转行的简单实现
  • mysql列转行以及年月分组实例
  • yii2数据库查询实践
  • sql中where子句与having子句的区别小结
  • jdbc大批量写入数据到sqlserver2000,记录数大于10000
  • 有效防止sql注入的5种方法总结
  • sql like子句的另一种实现方法(速度比like快)
  • dbcc shrinkdatabasems sql数据库日志压缩方法
  • 大数据量时提高分页的效率
  • 特殊的存储过程-触发器概述
  • 你真的知道怎么优化sql吗
  • 如何让sql运行得更快
  • sql server 列转行
  • sql 列转行
  • sql 列转行
  • sql列转行,如何把表转化为这个结果一共一行 一列....
  • sql列转行,统计数量
  • sql去重,列转行
  • oracle的sql语句列转行
  • sqlserver列转行 查询
  • SQLSERVER 列转行
  • 如何用SQL把下面两个表完全倒过来,行变列,列变行...
  • 免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved