sql 列转行 实例】的更多相关文章

select * from dbo.orders  group by  custid  with cube    select custid ,row_number() over(order by empid) as number from  orders    select count(*) from orders where empid >'5' and orderid in ('10248','10249')    drop table test  create table test(id…
继上篇<SQL 列转行 合并多条记录>后,有网友反馈新的需求还是不太会用. 现举例说明 一,网友需要如下的效果: 其实,这个需求依然可以我上篇的方法进行解答,但为了实现分组,需要distinct group1,同时,为了根据key1,key2,key3是否相同进行分组,所以要用where进行连接. 语法格式:select .....from t1 where key1=a.key1 and key2=a.key2... for xml path('') 二,进入正题,代码如下: select…
在工作中,大家可能会遇到一些SQL列转行.行转列的问题,恰好,我也遇到了,就在此记录一下.此处所用的是SQLServer2008R2. 行转列,列转行,都要预先知道要要处理多少数据,在此我就以三种方案来说明一下,分别是case when.PIVOT.For XML. 列转行: 首先创建测试数据: --测试语句,准备创建表的语句:如下 CREATE TABLE dbo.test1 ( id int IDENTITY(1,1) NOT NULL PRIMARY KEY NONCLUSTERED, t…
--列转行,逗号拼接指定列的值Oracle中写法:select wmsys.wm_concat(Field1) from TableASQL Server中写法:SELECT STUFF(( SELECT  ',' + Field1 from TableA FOR XML PATH('')), 1, 1, '')…
test表: 执行列转行sql: select student, sum(case Course when '语文' then Score else null end) 语文, sum(case Course when '数学' then Score else null end) 数学, sum(case Course when '英语' then Score else null end) 英语 from test group by student 得到结果:…
select OrderID,ProdDetailID from A 表A : OrderID,ProdDetailID 1             6 1             7 1             9 2              5 2             3 如:orderID=1 的列转行select STUFF((SELECT ','+ cast(ProdDetailID as varchar(4)) FROM A  where A.OrderID=1 FOR XML…
SQL Server2005提供了一个新查询语法——For XML PATH(''),这个语法有什么用呢?想象一下这样一个查询需求:有两个表,班级表A.学生表B,要查询一个班级里有哪些学生?针对这个需求,方法有很多.举例一下两种:1.Join连接:2.For XML PATH(''). 为了大家方便体验效果,附上创建数据库的代码: --班级表 create table T_Class ( CNo int primary key not null identity,--班级编号 CName nva…
需求:按照分组,将多条记录内容合并成一条,效果如下: 数据库示例: CREATE TABLE [t2]([NID] [bigint] NULL,[district] [nvarchar](255) NULL,[town] [nvarchar](255) NULL); insert into t2 values(1,'淮上区','曹老集镇'); insert into t2 values(2,'淮上区','淮滨街道'); insert into t2 values(3,'淮上区','梅桥乡');…
原表:转过的表: 代码: ) set @sql = 'select AssetRecordId ' select @sql = @sql + ' , max(case ExtendName when ''' + ExtendName + ''' then ExtendValue else null end) [' + ExtendName + ']' ) as a set @sql = @sql + ' from dbo.AssetExtend where AssetRecordId=61 gr…
SQL code------ 合并列值  --******************************************************************************************* 表结构,数据如下:  id    value  ----- ------  1    aa  1    bb  2    aaa  2    bbb  2    ccc    需要得到结果:  id    values  ------ -----------  1   …
--行转列 固定xml语法 declare @xml xml ; set @xml=cast('<v>2</v><v>4</v><v>3</v><v></v>' as xml); select tab.val.value('.'/*xpath 语法*/,'nvarchar(100)') d from @xml.nodes('/v') tab(val) --outer apply 是可以用到前面表的变量 sele…
合并列值   --*******************************************************************************************  表结构,数据如下:   id    value   ----- ------   1    aa   1    bb   2    aaa   2    bbb   2    ccc      需要得到结果:   id    values   ------ -----------   1    …
假设有张学生成绩表(tb)如下:Name Subject Result张三 语文 74张三 数学 83张三 物理 93李四 语文 74李四 数学 84李四 物理 94*/ -------------------------------------------------------------------------/*想变成 姓名         语文        数学        物理          ---------- ----------- ----------- -------…
1.需要实现一个单行的统计报表 思路先用一个union查出单列,然后再把单列转成单行 2.实现 SELECT MAX(CASE WHEN type = 1 THEN num ELSE 0 END) AS 'GeneralCnt', MAX(CASE WHEN type = 2 THEN num ELSE 0 END) AS 'HistoryCnt' from ( select '1' as 'type',count(*) as 'num' from General union all selec…
  declare @result varchar(255) set @result = ” select @result = @result + cast(F_IT_FWID as varchar(255)) +‘,’ from [TJFX].[dbo].[TB_JG_SJTJFXB201412] where F_IT_FWLX=1 select left(@result,len(@result) – 1) as fwid 转自http://ibear.me/2015/08/15/39…
1.加载驱动: Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); DriverManager.getConnection("jdbc:sqlserver://192.168.0.63:1433;DatabaseName=test","sa","hnzsfwq"); 2.分页: --top not in方式 select top 条数 * from ta…
行表: 行表 姓名 属性 属性值 JACK 身高 180 JACK 体重 80 JACK 年龄 27 TOM 身高 164 TOM 体重 59 TOM 年龄 20 列表: 列表 姓名 身高 年龄 体重 JACK 180 27 80 TOM 164 20 59 行转列就是将行表转换为列表,反之为列转行. --================================================================== ----------------------------行…
mysql语法中case when then与列转行的使用场景非常丰富. case语句类似java中条件分支语句的作用,可以类比java中的switch语句或者if语句来学习. 其语法如下: case语句的语法: 转换单个字段时: case 字段 when 字段值 then 返回值 when 字段值 then 返回值 when 字段值 then 返回值 ...... else 默认值 end 别名: 当有多个字段需要转换时: case when 字段名1=字段值11 and 字段名2=字段值2…
sql中的行转列和列转行的问题 这是一个常见的问题,也是一个考的问题 1.行转列的问题  简单实例 CREATE TABLE #T ( MON1 INT, MON2 INT, MON3 INT ) GO ,,) GO SELECT * FROM #T --行转列:(union all) SELECT MON1 FROM #T UNION ALL SELECT MON2 FROM #T UNION ALL SELECT MON3 FROM #T GO --最后的优化 SELECT * FROM (…
说明:本实例是以 SQL Server 2005 为运行环境的. 准备工作:创建一个名为 DB 的数据库(CREATE DATABASE DB). 一.T-SQL 行转列 1.创建如下表 CREATE  TABLE [Scores] ( [ID] INT IDENTITY(1,1), --自增标识 [StuNo] INT,                         --学号 [Subject] NVARCHAR(30),     --科目 [Score] FLOAT            …
经常在论坛看到高手使用了 for xml path,由于是搜索一下,记录了详细的使用方法.在SQL Server中利用 FOR XML PATH 语句能够把查询的数据生成XML数据,下面是它的一些应用示例. )); ,'a') ,'b') 运行这段脚本 select UserID,UserName from @TempTable FOR XML PATH 将生成如下结果: <row> <UserID>1</UserID>  <UserName>a</U…
首先pivot是一个列转行的函数,反向用是unpivot(行转列). 在SQL sever中可以这么写 SELECT * FROM [TABLE] /*数据源*/ AS A PIVOT ( MAX/*聚合函数*/(COL1/*行转列后 列的值*/) FOR A.COL2/*需要行转列的列*/ IN ([VALUE1],[VALUE2],[VALUE3].../*列的值*/) ) AS B 在Oracle中可以这么写 select * from tab pivot(max /*聚合函数*/ (co…
多行转字符串 这个比较简单,用||或concat函数可以实现  SQL Code  12    select concat(id,username) str from app_userselect id||username str from app_user 字符串转多列 实际上就是拆分字符串的问题,可以使用 substr.instr.regexp_substr函数方式 字符串转多行 使用union all函数等方式 wm_concat函数 首先让我们来看看这个神奇的函数wm_concat(列名…
在做数据统计的时候,行转列,列转行是经常碰到的问题.case when方式太麻烦了,而且可扩展性不强,可以使用 PIVOT,UNPIVOT比较快速实现行转列,列转行,而且可扩展性强 一.行转列 1.测试数据准备 CREATE TABLE [StudentScores] ( ), --学生姓名 ), --科目 [Score] FLOAT, --成绩 ) 2.行转列sql SELECT * FROM [StudentScores] /*数据源*/ AS P PIVOT ( SUM(Score/*行转…
说在前面 做一个数据统计和分析的项目,每天面对着各种数据,经过存储过程从源表计算汇总后需要写入中间结果表以提高数据使用效率,那么此时就需要用到行转列和列转行. 1.列转行 数据经过计算加工后会直接生成前端图表需要的数据源,但是程序里又需要把该数据经过列转行写入中间表中,下次再查询该数据时直接从中间表查询数据. 1.1 列换行语法 table_source UNPIVOT( value_column FOR pivot_column IN(<column_list>) ) 1.2  列转行案例…
多行转字符串 这个比较简单,用||或concat函数可以实现 select concat(id,username) str from app_userselect id||username str from app_user 字符串转多列 实际上就是拆分字符串的问题,可以使用 substr.instr.regexp_substr函数方式 字符串转多行 使用union all函数等方式 wm_concat函数 首先让我们来看看这个神奇的函数wm_concat(列名),该函数可以把列值以",&quo…
SQL 行转列和列转行 行列互转,是一个经常遇到的需求.实现的方法,有case when方式和2005之后的内置pivot和unpivot方法来实现. 在读了技术内幕那一节后,虽说这些解决方案早就用过了,却没有系统性的认识和总结过.为了加深认识,再总结一次. 行列互转,可以分为静态互转,即事先就知道要处理多少行(列);动态互转,事先不知道处理多少行(列). 1 --创建测试环境 2 USE tempdb; 3 GO 4 5 IF OBJECT_ID('dbo.Orders') IS NOT NU…
行列互转 复制代码 create table test(id ),quarter int,profile int) insert into test values(,,) insert into test values(,,) insert into test values(,,) insert into test values(,,) insert into test values(,,) insert into test values(,,) insert into test values(…
行列互转,是一个经常遇到的需求.实现的方法,有case when方式和2005之后的内置pivot和unpivot方法来实现. 在读了技术内幕那一节后,虽说这些解决方案早就用过了,却没有系统性的认识和总结过.为了加深认识,再总结一次. 行列互转,可以分为静态互转,即事先就知道要处理多少行(列);动态互转,事先不知道处理多少行(列). ) , , );, , );, , );, , );, , );, , );, , );, , );, , );, , );, , );GO 行转列-静态方案: ]…
转载:http://www.cnblogs.com/newwind521/archive/2010/11/25/1887203.html sql 行专列 列转行 普通行列转换 /* 标题:普通行列转换(version 2.0) 作者:爱新觉罗.毓华 时间:2008-03-09 地点:广东深圳 说明:普通行列转换(version 1.0)仅针对sql server 2000提供静态和动态写法,version 2.0增加sql server 2005的有关写法.  问题:假设有张学生成绩表(tb)如…