行列转换

 1 /****** Object:  Table [dbo].[Table_1]    Script Date: 08/06/2013 13:55:39 ******/
 2 /*行列转换*/
 3
 4 SET ANSI_NULLS ON
 5 GO
 6
 7 SET QUOTED_IDENTIFIER ON
 8 GO
 9
10 SET ANSI_PADDING ON
11 GO
12
13 /*对临时表无效*/
14 IF OBJECT_ID (‘#Table_1‘, ‘U‘) IS NOT NULL
15    DROP TABLE #Table_1;
16
17 CREATE TABLE #Table_1(
18     [name] [varchar](50) NOT NULL,
19     [score] [real] NOT NULL,
20     [subject_id] [int] NOT NULL
21 ) ON [PRIMARY]
22
23 insert into #Table_1 ([name],[score],[subject_id]) values(  ‘a‘    ,   90  ,   1   );
24 insert into #Table_1 ([name],[score],[subject_id]) values(  ‘b‘    ,   80  ,   2   );
25 insert into #Table_1 ([name],[score],[subject_id]) values(  ‘c‘    ,   70  ,   3   );
26 insert into #Table_1 ([name],[score],[subject_id]) values(  ‘d‘    ,   50  ,   1   );
27 insert into #Table_1 ([name],[score],[subject_id]) values(  ‘e‘    ,   40  ,   2   );
28 insert into #Table_1 ([name],[score],[subject_id]) values(  ‘f‘    ,   60  ,   1   );
29
30 --显示1
31
32 SELECT [name],[1],[2],[3]
33 FROM #Table_1
34 pivot
35 (
36   sum(score) for subject_id in ([1],[2],[3])
37 ) as pvt
38
39 select * from #Table_1
40
41 --显示2
42
43 SELECT [name],[subject_id],[score]
44 FROM
45 (
46     SELECT [name],[1],[2],[3]
47     FROM #Table_1
48     pivot
49     (
50       sum(score) for subject_id in ([1],[2],[3])
51     ) as pvt
52 ) p
53 unpivot
54 (
55     score for subject_id in([1],[2],[3])
56 ) as unpvt  
时间: 2024-08-06 00:54:56

行列转换的相关文章

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(

如何用Pivot实现行列转换

在Oracle中,如果要实现行列转换,较为常见的是用DECODE和CASE语句.对于简单的行列转行,DECODE和CASE语句尚能应付.在逻辑比较复杂,分组聚合较多的场景中,DECODE和CASE语句则力有不逮.而pivot则可完美解决这一切. 首先,我们来看看Oracle对于其的解释: 可见,pivot是数据仓库中的关键技术,它利用交叉查询(crosstabulation query)将行转换为列. 基本语法如下: SELECT .... FROM <table-expr> PIVOT (

Mysql实现行列转换

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

在Sqlserver下巧用行列转换日期的数据统计

在Sqlserver下巧用行列转换日期的数据统计 前言 在SQLSERVER 中有很多统计函数的基础语法,有使用Group By 或 partition by 后配合Sum,Count(*) 等用法.常应用于统计网站的PV流量.合同项目中月收入等业务场景中.在文中我分享下最近做过的统计小案例,和大家互相学习下:) 背景 合同中行项目按月收入的统计 1.业务逻辑及需求  1.1 表业务逻辑 合同是公司间互相签署的法律契约,一份合同从诞生起,就开始流转于公司的各个部门,最核心的还是盈亏的数值.盈亏是

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

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

Shell练习 行列转换

原题:https://leetcode.com/problems/transpose-file/Given a text file file.txt, transpose its content. You may assume that each row has the same number of columns and each field is separated by the ' ' character. For example, if file.txt has the followin

SQL中PIVOT 行列转换

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

行列转换小结 Pivot ,Unpivot (转,改)

行专列 Pivot 1)SQL 2000版本 静态 SELECT ID , SUM(CASE Code WHEN 'Item1' THEN Value ELSE 0 END) AS Item1 , SUM(CASE Code WHEN 'Item2' THEN Value ELSE 0 END) AS Item2 , SUM(CASE Code WHEN 'Item3' THEN Value ELSE 0 END) AS Item3 FROM RowToCol GROUP BY ID --或者用

03. 行列转换写法小结

原文:03. 行列转换写法小结 行列转换,通常有2种方法,一是CASE WHEN/UNION:一是PIVOT/UNPIVOT.对于行值或列数不固定的情况,需要用动态SQL. 一. 行转列 --drop table RowToCol create table RowToCol ( ID int, Code varchar(10), Value int ) Go insert RowToCol select 1,'Item1',1000 union all select 1,'Item2',1000