行列转换的例子

IF OBJECT_ID(‘tempdb..#ABC‘) IS NOT NULL
DROP TABLE #ABC  

create table #ABC
(
ID  INT
,UserID BIGINT
,UserExamID INT
,TestPaperID INT
,QuestionID INT
,AnswerID   INT
,Ctime DATETIME
)
INSERT INTO #ABC
SELECT 1,120629210042331600,1,3,22,49,GETDATE() UNION ALL
SELECT 2,120629210042331600,1,3,23,51,GETDATE() UNION ALL
SELECT 3,120629210042331600,1,3,24,56,GETDATE() UNION ALL
SELECT 4,120629210042331600,1,3,25,62,GETDATE() UNION ALL
SELECT 5,120629210042331600,1,3,26,66,GETDATE() UNION ALL
SELECT 6,120629210042331600,1,3,27,72,GETDATE() UNION ALL
SELECT 7,120629210042331600,1,3,28,77,GETDATE() UNION ALL
SELECT 8,120629210042331600,1,3,29,81,GETDATE() UNION ALL
SELECT 9,120629210042331600,1,3,30,86,GETDATE() UNION ALL
SELECT 10,120629210042331600,1,3,31,90,GETDATE() UNION ALL
SELECT 1,120629210011732588,1,3,22,49,GETDATE() UNION ALL
SELECT 2,120629210011732588,1,3,23,51,GETDATE() UNION ALL
SELECT 3,120629210011732588,1,3,24,56,GETDATE() UNION ALL
SELECT 4,120629210011732588,1,3,25,62,GETDATE() UNION ALL
SELECT 5,120629210011732588,1,3,26,66,GETDATE() UNION ALL
SELECT 6,120629210011732588,1,3,27,72,GETDATE() UNION ALL
SELECT 7,120629210011732588,1,3,28,77,GETDATE() UNION ALL
SELECT 8,120629210011732588,1,3,29,81,GETDATE() UNION ALL
SELECT 9,120629210011732588,1,3,30,86,GETDATE() UNION ALL
SELECT 10,120629210011732588,1,3,31,90,GETDATE()    

SELECT * FROM #ABC  

DECLARE @s NVARCHAR(4000)
SELECT @s = ISNULL(@s + ‘,‘, ‘‘) +  QUOTENAME(QuestionID)
FROM  (select distinct QuestionID from #ABC) as A ---列名不要重复  

Declare @sql NVARCHAR(4000)
SET @sql=‘
 select r.* from
(select UserID,QuestionID,AnswerID from #ABC) as t
pivot
(
max(t.AnswerID)
for t.QuestionID in (‘+@s+‘)
) as r‘  

EXEC( @sql) 

如果要消除NULL,可以利用@s构造一个 ISNULL(字段.0) AS [字段]

时间: 2024-10-11 16:36:59

行列转换的例子的相关文章

【ABAP系列】SAP ABAP 行列转换的方法

公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP 行列转换的方法 前言部分 大家可以关注我的公众号,公众号里的排版更好,阅读更舒适. 正文部分 有人问:马蹄能给个行列转换的例子吗 我:百度很多吧,找找看 回:百度来的没看懂啊 我:好吧,写个例子 很久没用在博客里发代码了,发个行列转换的例子 其实理解原理就好,就是获取到行,然后动态的赋值给列 代码如下: ? LO

SQL行列转换6种方法

在进行报表开发时,很多时候会遇到行列转换操作,很对开发人员针对于SQL级别行列转换操作一直不甚理解,今天正好抽空对其进行了一些简单的总结.这里主要列举3种可以实现SQL行列转换的方法,包括通用SQL解法以及Oracle支持解法. 一.测试数据 测试表依旧采用Oracle经典的scott模式下的dept表和emp表,结构如下: DEPT: create table DEPT ( DEPTNO NUMBER(2) not null, DNAME VARCHAR2(14), LOC VARCHAR2(

Mysql实现行列转换

前言: 最近又玩起了sql语句,想着想着便给自己出了一道题目:“行列转换”.起初瞎折腾了不少时间也上网参考了一些博文,不过大多数是采用oracle数据库当中的一些便捷函数进行处理,比如”pivot”.那么,在Mysql环境下如何处理? 自己举了个小例子: sql代码实现: 1 -- Step1:建表并插入数据 2 3 -- Step2:中间转换,即“二维转一维”得到一维表. 4 5 -- Step3:利用IF判断并“group by”即可得到目标结果表. 6 7 8 9 -- 加载 10 11

oracle行列转换总结-转载自ITPUB

原贴地址:http://www.itpub.net/thread-1017026-1-1.html 谢谢原贴大人 最近论坛很多人提的问题都与行列转换有关系,所以我对行列转换的相关知识做了一个总结, 希望对大家有所帮助,同时有何错疏,恳请大家指出, 我也是在写作过程中学习,算是一起和大家学习吧. 行列转换包括以下六种情况: *列转行 *行转列 *多列转换成字符串 *多行转换成字符串 *字符串转换成多列 *字符串转换成多行 下面分别进行举例介绍. 首先声明一点,有些例子需要如下10g及以后才有的知识

SQL中PIVOT 行列转换

SQL中PIVOT 行列转换 本文导读:T-SQL语句中,Pivot运算符用于在列和行之间对数据进行旋转或透视转换,PIVOT命令可以实现数据表的列转行,同时执行聚合运算,UNPIVOT则与其相反,实现数据的行转列. PIVOT通过将表达式某一列中的唯一值转换为输出中的多个列来旋转表值表达式,并在必要时对最终输出中所需的任何其余列值执行聚合.UNPIVOT与PIVOT执行相反的操作,将表值表达式的列转换为列值. 通俗简单的说:PIVOT就是行转列,UNPIVOT就是列传行 一.PIVOT实例 1

简单的叙述下SQL中行列转换的小知识!

行列转换对于工作还是学习中总是不可避免的会遇到(虽然本人还尚未工作,萌萌哒的学生一枚),解决的方法也有很多,我这里就总结一下我所想解决的问题以及怎么去解决的方法, 可能网上已经有很多类似的方法了,有的比我的可能会更好,就当我记录一下自己的学习经历吧.这里我们列举一个关于股票的每日入账出账做一个统计然后整理数据,虽然例子可能不太合理, 但是不要太执着于这些细节,能说明问题就好,傻笑ing..... 1 列转行:按照某一列分组,将另一列作为行时列名可数,不变. 什么意思呢?话说多了反而不懂,放两张图

oracle 行列转换

最近几天一直在弄Oracle-SQL的问题,涉及到了一些平时没有用到的东西,也因此而在这里郁闷了好久.现在问题得到了解决虽说不算完美.但是还是和大家一起分享一下. 行列转换之一:sum(case when.. then.. else.. end) as 语句 这种也可能是我们遇到的第一个行列转换的方法.巧妙的利用汇总和判断语句就可以解决的. 先看一个简单的基础表:如下图 create table STUDENT (   STUNAME      NVARCHAR2(50),   SUBJECTN

交叉表、行列转换和交叉查询经典

交叉表.行列转换和交叉查询经典分类: SqlServer 2007-12-05 16:01 6776人阅读 评论(1) 收藏 举报sqlsqlserverinsertnull产品sql server交叉表.行列转换和交叉查询经典一.什么是交叉表“交叉表”对象是一个网格,用来根据指定的条件返回值.数据显示在压缩行和列中.这种格式易于比较数据并辨别其趋势.它由三个元素组成: 行列摘要字段“交叉表”中的行沿水平方向延伸(从一侧到另一侧).在上面的示例中,“手套”(Gloves) 是一行.“交叉表”中的

Oracle 行列转换 总结 (转)

行列转换包括以下六种情况: 1. 列转行 2. 行转列 3. 多列转换成字符串 4. 多行转换成字符串 5. 字符串转换成多列 6. 字符串转换成多行 首先声明,有些例子需要如下10g及以后才有的知识: A. 掌握model子句, B. 正则表达式 C. 加强的层次查询 1.列转行CREATE TABLE t_col_row( ID INT, c1 VARCHAR2(10), c2 VARCHAR2(10), c3 VARCHAR2(10)); INSERT INTO t_col_row VAL