行转列:SQL SERVER PIVOT与用法解释】的更多相关文章

在数据库操作中,有些时候我们遇到需要实现“行转列”的需求,例如一下的表为某店铺的一周收入情况表: WEEK_INCOME(WEEK VARCHAR(10),INCOME DECIMAL) 我们先插入一些模拟数据: INSERT INTO WEEK_INCOME UNION ALL UNION ALL UNION ALL UNION ALL UNION ALL UNION ALL 一般我们最经常使用的查询是查询一周中每天或某几天的收入,例如查询周一至周日全部的收入: SELECT WEEK,INC…
通俗简单的说:PIVOT就是行转列,UNPIVOT就是列传行 在数据库操作中,有些时候我们遇到需要实现“行转列”的需求,例如一下的表为某店铺的一周收入情况表: WEEK_INCOME(WEEK ),INCOME DECIMAL) 我们先插入一些模拟数据: INSERT INTO WEEK_INCOME 一般我们最经常使用的查询是查询一周中每天或某几天的收入,例如查询周一至周日全部的收入: SELECT WEEK,INCOME FROM WEEK_INCOME 得到如下的查询结果集: WEEK  …
前段时间开发系统时,有个功能是动态加载列,于是就使用了SQL Server自带的PIVOT函数进行行转列,开始用的非常溜,效果非常好.但是提交测试后问题来了,测试添加的列名中包含空格,然后就杯具了,功能报错了, 一波未平一波又起,测试添加的数据中包含有以数字开头的,结果又GG了,好沮丧啊!!!!!! 于是开启了查找资料之路,发现只要把列名用方括号[]包起来,问题就解决了,然后就实践了一下,果然以上两个问题都解决了,世界瞬间美好了!!! 然后自己又添加了一些包含特殊字符等的数据,一切都OK没有出现…
[pivot]行转列:多行变一列 假设学生成绩表Score1 Name Subject Score 小张 语文 88 小花 数学 89 小张 数学 90 Name 语文 数学 小花 null 89 小张 88 90 --一定要有聚合函数, 如sum(Score) select * from Score1 pivot (sum(Score) for Subject in (语文,数学)) b [unpivot]列转行:一列变多行 假设学生成绩表Score2 Name Chinese Math 小花…
转自:https://www.cnblogs.com/fishparadise/p/4809014.html 前言 SQL SERVER提供多种不同的数据导出导入的工具,也可以编写SQL脚本,使用存储过程,生成所需的数据文件,甚至可以生成包含SQL语句和数据的脚本文件.各有优缺点,以适用不同的需求.下面介绍大容量数据导出导入的利器——BCP实用工具.同时在后面也介绍BULK INSERT导入大容量数据,以及BCP结合BULK INSERT做数据接口的实践(在SQL2008R2上实践). --打开…
一般我们在使用SQL语句实现行列转置时候,最常用的方法无外乎就是 case语句来实现,但是如果需要需要转置的列太多,那么case起来语句就无限庞大,十分不方便,sql server中的PIVOT就可以帮助我们解决此类问题 PIVOT語法,如下: SELECT <non-pivoted column>,     [first pivoted column] AS <column name>,     [second pivoted column] AS <column name…
用法如下: 1.如果表中的某个列是可选的,那么我们可以在不向该列添加值的情况下插入新记录或更新已有的记录,这意味着该字段将以 NULL 值保存. 2.NULL 用作未知的或不适用的值的占位符. 3.定长记录(char)的NULL值占用存储空间,而变长记录(varchar)的NULL值不占用存储空间. 注意如下: 1.无法比较 NULL 和 0,因为它们是不等价的. 2.无法使用比较运算符来测试 NULL 值,比如 =,<,>或者 <>.我们必须使用 IS NULL 和 IS NOT…
SQL日期函数 SQL日期函数中的类型码可以为0,1,2,3,4,5,6,7,8,9,10,11,12,13,14 ,20,21,22,23,24,25,100,101,102,103,104,105,106,107,108,109,100, 110,111,112,113,114,120,121,126,127,130,131 函数 结果 select CONVERT(varchar(30),getdate(),0) 09 13 2017 3:51PM select CONVERT(varch…
SQL脚本是一种用SQL语言写的批处理文件(.sql),SQL脚本通常可以由SQL查询分析器来执行. ===================================================== GO向 SQL Server 实用工具发出一批 Transact-SQL 语句结束的信号.go是把t-sql語句分批次執行.(一步成功了才会执行下一步,即一步一个GO)     语法    GO       注释    GO   不是Transact-SQL语句:而是可为cmdsql和os…
if exists用法     if exists 判断表中的内容是否存在     IF EXISTS(SELECT FROM proprice_sheet WHERE vndcode = @vndcode AND matcode = @matcode) from 表 where 列=@ 参数)       其他用法   1 判断数据库是否存在 if exists (select * from sys.databases where name = ’数据库名’) drop database [数…
有时候会碰到行转列的需求(也就是将列的值作为列名称),通常我都是用 CASE END + 聚合函数来实现的. 如下: declare @t table (StudentName nvarchar(20), Subject nvarchar(20), Score int) Insert into @t (StudentName,Subject,Score) values ( '学生A', '中文', 80 ); Insert into @t (StudentName,Subject,Score)…
在数据库中, 常用的一个流水编号通常会使用 identity 栏位来进行设置, 这种编号的好处是一定不会重覆, 而且一定是唯一的, 这对table中的唯一值特性很重要, 通常用来做客户编号, 订单编号等功能, 以下介绍关于此种栏位常用方式及相关技术. CREATE TABLE products (id int IDENTITY PRIMARY KEY, product varchar(40)) 取得identity值: 因为 identity 特性, 所以在 insert into 该 tabl…
sql server中,返回影响行数是:If @@RowCount<1 Oracle中,返回影响行数是:If sql%rowcount<1 例: sqlserver: create procedure Proc_test , )='', AS BEGIN Update T_Mt Set Stat=@Stat,OStat=@Stat,RptTime=Getdate() Where MsgId=@MsgId --没有更新成功就插入到t_Statbuf insert into t_statbuf(M…
参照这个网址介绍 http://www.cnblogs.com/lwhkdash/archive/2012/06/26/2562979.html 一般SQL Server的函数都会识别为紫色,可是PIVOT却是灰色,我一开始以为是SQL Server不能使用,但能正常使用 可以使用print @@version确认下兼容级别,90的是没问题的 Microsoft SQL Server 2005 - 9.00.4060.00 (X64) 数据库右键->属性->选项 这聚合函数对text,nvar…
在软件开发中,经常性会用到定时任务.这个时候你可能会想到线程.但是事实中,线程方法比较麻烦.容易出错,资源竞争等问题,设计起来让你很头痛. 现在给大家提供一个新的思路,用SQL SERVER 的任务管理器来解决问题. 解决下列问题: 1.商品有购买时间限制.比如定时上线,下线.竞拍结束自动通知用户. 2.数据库中某个数据发生了变化,需要执行一段代码块(这里面的代码并不是存储过程代码,意指c#,JAVA等代码). 3.某个数据发生了变化,需要执行某个动作.(不是立马执行) 针对上面的问题,我们总结…
  -- Create table /*create table TEST_TABLE ( STUDENT VARCHAR2(200), SUBJECT VARCHAR2(200), GRADE NUMBER ) tablespace SYSTEM pctfree 10 pctused 40 initrans 1 maxtrans 255 storage ( initial 64K minextents 1 maxextents unlimited ); */ /*insert into tes…
Sql server中 如何用sql语句创建视图 1.视图的作用 视图的作用: 第一点:使用视图,可以定制用户数据,聚焦特定的数据. 解释: 在实际过程中,公司有不同角色的工作人员,我们以销售公司为例的话, 采购人员,可以需要一些与其有关的数据,而与他无关的数据,对他没 有任何意义,我们可以根据这一实际情况,专门为采购人员创建一个视 图,以后他在查询数据时,只需select * from view_caigou 就 可以啦. 第二点:使用视图,可以简化数据操作. 解释:我们在使用查询时,在很多时…
sql newid()随机函数   从A表随机取2条记录,用SELECT TOP 10 * FROM ywle order by newid()order by 一般是根据某一字段排序,newid()的返回值 是uniqueidentifier ,order by newid()随机选取记录是如何进行的newid()在扫描每条记录的时候都生成一个值, 而生成的值是随机的, 没有大小写顺序. 所以最终结果再按这个排序, 排序的结果当然就是无序的了或者select   top   10   *,ne…
在日常使用中,经常遇到这样的情况,需要将数据库中行转化成列显示,如 转化为 这个时候,我们就需要使用pivot函数 百度后,参考网址http://www.2cto.com/database/201501/367164.html ,完成了以下操作 with temp as( select '四川省' nation ,'成都市' city,'第一' ranking from dual union all select '四川省' nation ,'绵阳市' city,'第二' ranking fro…
var conStr = "server=localhost;database=Data;user=sa;pwd=123456"; using (var connection = new SqlConnection(conStr)) { connection.Open(); var sql = string.Format( "update dbo.AutoStationData set Temperture={0} where StationNum=58365 and Dat…
记录下来.每次使用都忘记.... DATEDIFF 函数 [日期和时间] 功能 返回两个日期之间的间隔. 语法 DATEDIFF ( date-part, date-expression-1, date-expression-2 ) date-part :year | quarter | month | week | day | hour | minute | second | millisecond 参数 date-part    指定要测量其间隔的日期部分. 有关日期部分的详细信息,请参见日…
--现在我们是用PIVOT函数将列[WEEK]的行值转换为列,并使用聚合函数Count(TotalPrice)来统计每一个Week列在转换前有多少行数据,语句如下所示 select * from ShoppingCart as C PIVOT(count(TotalPrice) FOR [Week] IN([1],[2],[3],[4],[5],[6],[7])) AS T…
作用: SELECT INTO 语句从一个表中选取数据,然后把数据插入另一个表中. SELECT INTO 语句常用于创建表的备份复件或者用于对记录进行存档 这个语句会在数据库中用和你所指定的列类型和标题创建一个新的表. 注意事项: SELECT INTO是一种不需要重写表的脚本即可创建一个表的空拷贝的最佳方法,但这个拷贝不包括索引和触发器.你所要做的就是运行一个WHERE子句中条件为假的SELECT INTO.你让SELEC TINTO产生的表必须是数据库中不存在的,否则就会产生一个错误.使用…
--插入数据,并返回刚刚插入的数据id INSERT INTO [soloreztest] ([name]) output inserted.id VALUES ('solorez') --执行结果: --id ------------- --5 (1 行受影响) 第二种方法:insert into table1 values(colvalue1,colvalue2)select ident_current('table1') 第三种方法:insert into table1 values(co…
因需求变更要改表的列名,平常都是跑到Enterprise manager中选取服务器->数据库->表,然后修改表,这样太麻烦了,查了一下,可以用script搞定,代码如下: EXEC sp_rename '表名.[原列名]', '新列名', 'column' Transact-SQL 参考  sp_rename --更改当前数据库中用户创建对象(如表.列或用户定义数据类型)的名称. 语法  sp_rename [ @objname = ] 'object_name' , [ @newname…
SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[YearSalary]( [year] [int] NULL, [salary] [money] NULL ) ON [PRIMARY] GO select * from yearsalary; ],[],[],[],[],[],[],[],[] from ( select year,salary from yearsalary) as SourceTable…
转自:http://www.cnblogs.com/no7dw/archive/2010/03/04/1678287.html 因需求变更要改表的列名,平常都是跑到Enterprise manager中选取服务器->数据库->表,然后修改表,这样太麻烦了,查了一下,可以用script搞定,代码如下: EXEC sp_rename '表名.[原列名]', '新列名', 'column' Transact-SQL 参考  sp_rename --更改当前数据库中用户创建对象(如表.列或用户定义数据…
定义和用法 DATEDIFF() 函数返回两个日期之间的时间,例如计算年龄大小. DATEDIFF(datepart,startdate,enddate)startdate 和 enddate 参数是合法的日期表达式. datepart 缩写 年 yy, yyyy 季度 qq, q 月 mm, m 年中的日 dy, y 日 dd, d 周 wk, ww 星期 dw, w 小时 hh 分钟 mi, n 秒 ss, s 毫秒 ms 微妙 mcs 纳秒 ns 举例: DATEDIFF(YY, DCSN…
CREATE TABLE tTable ( id INT , f1 VARCHAR(10) , f2 VARCHAR(10) , f3 VARCHAR(10) ) GO INSERT INTO tTable SELECT 11 ,12 , 13 , 14 INSERT INTO tTable SELECT 13 ,24 ,25,26 GO CREATE TABLE tTable2 ( id INT , f5 VARCHAR(10) , f6 VARCHAR(10) ) GO CREATE PRO…