sql 行转 列, 列转行
- 行列互转
- 复制代码
- create table test(id int,name varchar(),quarter int,profile int)
- insert into test values(,'a',,)
- insert into test values(,'a',,)
- insert into test values(,'a',,)
- insert into test values(,'a',,)
- insert into test values(,'b',,)
- insert into test values(,'b',,)
- insert into test values(,'b',,)
- insert into test values(,'b',,)
- select * from test
- --行转列
- select id,name,
- [] as "一季度",
- [] as "二季度",
- [] as "三季度",
- [] as "四季度",
- [] as ""
- from
- test
- pivot
- (
- sum(profile)
- for quarter in
- ([],[],[],[],[])
- )
- as pvt
- create table test2(id int,name varchar(), Q1 int, Q2 int, Q3 int, Q4 int)
- insert into test2 values(,'a',,,,)
- insert into test2 values(,'b',,,,)
- select * from test2
- --列转行
- select id,name,quarter,profile
- from
- test2
- unpivot
- (
- profile
- for quarter in
- ([Q1],[Q2],[Q3],[Q4])
- )
- as unpvt
- 复制代码
- sql替换字符串 substring replace
- 复制代码
- --例子1:
- update tbPersonalInfo set TrueName = replace(TrueName,substring(TrueName,,),'**') where ID =
- --例子2:
- update tbPersonalInfo set Mobile = replace(Mobile,substring(Mobile,,),'********') where ID =
- --例子3:
- update tbPersonalInfo set Email = replace(Email,'chinamobile','******') where ID =
- 复制代码
- SQL查询一个表内相同纪录 having
- 如果一个ID可以区分的话,可以这么写
- select * from 表 where ID in (
- select ID from 表 group by ID having sum()>)
- 如果几个ID才能区分的话,可以这么写
- select * from 表 where ID1+ID2+ID3 in
- (select ID1+ID2+ID3 from 表 group by ID1,ID2,ID3 having sum()>)
- 其他回答:数据表是zy_bho,想找出ZYH字段名相同的记录
- 复制代码
- --方法1:
- SELECT *FROM zy_bho a WHERE EXISTS
- (SELECT FROM zy_bho WHERE [PK] <> a.[PK] AND ZYH = a.ZYH)
- --方法2:
- select a.* from zy_bho a join zy_bho b
- on (a.[pk]<>b.[pk] and a.zyh=b.zyh)
- --方法3:
- select * from zy_bbo where zyh in
- (select zyh from zy_bbo group by zyh having count(zyh)>)
- --其中pk是主键或是 unique的字段。
- 复制代码
- 把多行SQL数据变成一条多列数据,即新增列
- 复制代码
- Select
- DeptName=O.OUName,
- '9G'=Sum(Case When PersonalGrade= Then Else End),
- '8G'=Sum(Case When PersonalGrade= Then Else End),
- '7G4'=Sum(Case When PersonalGrade= AND JobGrade = Then Else End),
- '7G3'=Sum(Case When PersonalGrade= AND JobGrade = Then Else End),
- '6G'=Sum(Case When PersonalGrade= Then Else End),
- '5G3'=Sum(Case When PersonalGrade= AND JobGrade = Then Else End),
- '5G2'=Sum(Case When PersonalGrade= AND JobGrade = Then Else End),
- '4G'=Sum(Case When PersonalGrade= Then Else End),
- '3G2'=Sum(Case When PersonalGrade= AND JobGrade = Then Else End),
- '3G1'=Sum(Case When PersonalGrade= AND JobGrade = Then Else End),
- '2G'=Sum(Case When PersonalGrade= Then Else End),
- '1G'=Sum(Case When PersonalGrade= Then Else End),
- --' 未定级'=Sum(Case When PersonalGrade=NULL Then Else End)
- 复制代码
- 表复制
- insert into PhoneChange_Num ([IMSI],Num)
- SELECT [IMSI]
- ,count([IMEI]) as num
- FROM [Test].[dbo].[PhoneChange] group by [IMSI] order by num desc
- 语法1:Insert INTO table(field1,field2,...) values(value1,value2,...)
- 语法2:Insert into Table2(field1,field2,...) select value1,value2,... from Table1(要求目标表Table2必须存在,由于目标表Table2已经存在,所以我们除了插入源表Table1的字段外,还可以插入常量。)
- 语法3:SELECT vale1, value2 into Table2 from Table1(要求目标表Table2不存在,因为在插入时会自动创建表Table2,并将Table1中指定字段数据复制到Table2中。)
- 语法4:使用导入导出功能进行全表复制。如果是使用【编写查询以指定要传输的数据】,那么在大数据表的复制就会有问题?因为复制到一定程度就不再动了,内存爆了?它也没有写入到表中。而使用上面3种语法直接执行是会马上刷新到数据库表中的,你刷新一下mdf文件就知道了。
- 利用带关联子查询Update语句更新数据
- 复制代码
- --方法1:
- Update Table1 set c = (select c from Table2 where a = Table1.a) where c is null
- --方法2:
- update A
- set newqiantity=B.qiantity
- from A,B
- where A.bnum=B.bnum
- --方法3:
- update
- (select A.bnum ,A.newqiantity,B.qiantity from A left join B on A.bnum=B.bnum) AS C
- set C.newqiantity = C.qiantity
- where C.bnum =XX
- 复制代码
- 连接远程服务器
- --方法1:
- select * from openrowset('SQLOLEDB','server=192.168.0.67;uid=sa;pwd=password','SELECT * FROM BCM2.dbo.tbAppl')
- --方法2:
- select * from openrowset('SQLOLEDB','192.168.0.67';'sa';'password','SELECT * FROM BCM2.dbo.tbAppl')
- --判断某些字段是否为空
--case
select case when '字段名' is null then '\N' else convert(varchar(20),'字段名') end as 'NewName'
select case when null is null then '\N' else convert(varchar(20),null) end as 'NewName'- --SQL Server 2005:coalesce
select coalesce('字符串类型字段','\N') as 'NewName'
select coalesce(convert(varchar(20),'非字符串类型字段'),'\N') as 'NewName'
select coalesce(convert(varchar(20),null),'\N') as 'NewName'- --coalesce,返回其参数中的第一个非空表达式
select Coalesce(null,null,1,2,null)union
select Coalesce(null,11,12,13,null)union
select Coalesce(111,112,113,114,null)
newid()的妙用
- 生成测试数据
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[test](
[name] [varchar](20) NULL,
[quarter] [int] NULL,
[profile] [int] NULL,
[dates] [smallint] NULL,
[ID] [int] IDENTITY(1,1) NOT NULL,
CONSTRAINT [PK_test] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
SET IDENTITY_INSERT [dbo].[test] ON
INSERT [dbo].[test] ([name], [quarter], [profile], [dates], [ID]) VALUES (N'a', 1, 1000, 421, 1)
INSERT [dbo].[test] ([name], [quarter], [profile], [dates], [ID]) VALUES (N'Aa', 2, 2000, 421, 2)
INSERT [dbo].[test] ([name], [quarter], [profile], [dates], [ID]) VALUES (N'AA', 3, 4000, 421, 3)
INSERT [dbo].[test] ([name], [quarter], [profile], [dates], [ID]) VALUES (N'a', 4, 5000, 421, 4)
INSERT [dbo].[test] ([name], [quarter], [profile], [dates], [ID]) VALUES (N'b', 1, 3000, 421, 5)
INSERT [dbo].[test] ([name], [quarter], [profile], [dates], [ID]) VALUES (N'b', 2, 3500, 421, 6)
INSERT [dbo].[test] ([name], [quarter], [profile], [dates], [ID]) VALUES (N'b', 3, 4200, 421, 7)
INSERT [dbo].[test] ([name], [quarter], [profile], [dates], [ID]) VALUES (N'b', 4, 5500, 421, 8)
INSERT [dbo].[test] ([name], [quarter], [profile], [dates], [ID]) VALUES (N'a', 1, 1000, 421, 9)
SET IDENTITY_INSERT [dbo].[test] OFF
--从数据库中随机取出N条记录的方法:newid()
sql 行转 列, 列转行的更多相关文章
- SQL 行转列和列转行
SQL 行转列和列转行 行列互转,是一个经常遇到的需求.实现的方法,有case when方式和2005之后的内置pivot和unpivot方法来实现. 在读了技术内幕那一节后,虽说这些解决方案早就用过 ...
- sql 行专列 列转行 普通行列转换
转载:http://www.cnblogs.com/newwind521/archive/2010/11/25/1887203.html sql 行专列 列转行 普通行列转换 /* 标题:普通行列转换 ...
- sql 行转列 PIVOT 列转行 UNPIVOT
原文:sql 行转列 PIVOT 列转行 UNPIVOT 一: 现有表一(t_table1),想转为表二(t_table2)的格式. 表一: 年 公司 收入 2013 公司1 12 2013 公司2 ...
- SQL Server 行转列,列转行。多行转成一列
一.多行转成一列(并以","隔开) 表名:A 表数据: 想要的查询结果: 查询语句: SELECT name , value = ( STUFF(( SELECT ',' + va ...
- SQL行转列,列转行
SQL 行转列,列转行 行列转换在做报表分析时还是经常会遇到的,今天就说一下如何实现行列转换吧. 行列转换就是如下图所示两种展示形式的互相转换 行转列 假如我们有下表: SELECT * FROM s ...
- Sql server 中将数据行转列列转行(二)
老规矩,先弄一波测试数据,数据填充代码没有什么意义,先折叠起来: /* 第一步:创建临时表结构 */ CREATE TABLE #Student --创建临时表 ( StuName ), --学生名称 ...
- SQL2005语句实现行转列,列转行
在做报表时,经常需要将数据表中的行转列,或者列转行,如果不知道方法,你会觉得通过SQL语句来实现非常难.这里,我将使用pivot和unpivot来实现看似复杂的功能.这个功能在sql2005及以上版本 ...
- Ms sql行转列。汇总
SQL行转列汇总 PIVOT 用于将列值旋转为列名(即行转列),在 SQL Server 2000可以用聚合函数配合CASE语句实现 PIVOT 的一般语法是:PIVOT(聚合函数(列) FOR 列 ...
- sql 行转列总结
原文:sql 行转列总结 PIVOT UNPIVOT的用法 PIVOT用于将列值旋转为列名(即行转列),在SQL Server 2000可以用聚合函数配合CASE语句实现 PIVOT的一般语法是:PI ...
- Sql 行转换为列 以及列转换为行的心得
这是 创建数据库的脚本文件 CREATE TABLE [dbo].[stu]( [学号] [nvarchar](255) NOT NULL, [姓名] [nvarchar](255) NULL, [性 ...
随机推荐
- EditPlus v4.5 简体中文
优秀的代码编辑器! 下载地址: EditPlus v4.00 build 465 简体中文汉化增强版 http://yunpan.cn/cVCSIZsKK7VFF 访问fe58 http://p ...
- 思维导图分享以及MindManager使用说明
来源于: http://www.cnblogs.com/muhongxing/archive/2009/12/22/1628782.html http://www.cnblogs.com/muhong ...
- MySQL热备脚本
MYSQL 备份方法: 热备: http://blog.itpub.net/27099995/viewspace-1295099/ http://blog.csdn.net/dban ...
- 在Winform中播放视频等【DotNet,C#】
在项目中遇到过这样的问题,就是如何在Winform中播放视频.当时考察了几种方式,第一种是直接使用Windows Media Player组件,这种最简单:第二种是利用DirectX直接在窗体或者控件 ...
- 作业4.5-2用for循环打印菱形
package lx; public class lx { public static void main(String[] args) { for(int i = 1;i <= 10 ;i++ ...
- iPad开发--美团界面的搭建(主要是对Popover的使用,以及监听)
一.主界面的搭建,效果图.设置self.navigationItem.leftBarButtonItems属性. 由于leftBarButtonItem是通过xib文件创建的,通过xib创建的控件默认 ...
- 状态压缩 HDU1074
t组数据 n门课程 底限 完成要几天 dp[i] 表示i的二进制数中 1 对应位置课程 完成 最少扣多少分 完成的时间 记录一下怎么下来的 1->2^n 列举 (1<<n) ...
- java-通讯stocket插件mina实例
mina是对nio的具体实现.是目前比较高效和流行的nio(非阻塞式I/O)框架 mina主要包括: 其中服务端为:NioSocketAcceptor 客户端为:NioSocketConnector ...
- 如何在HTMl网页中插入百度地图
方法/步骤 1.打开"百度地图生成器"的网址:http://api.map.baidu.com/lbsapi/creatmap/index.html 如下图: 2.在"1 ...
- SPDY 是什么?如何部署 SPDY?
摘要:当老迈的 HTTP 协议逐渐不能满足人们需求的时候,Google 的 SPDY 协议出现在面前,那么这个长期以来一直被认为是 HTTP 2.0 唯一可行选择的 SPDY 是什么呢?当下我们如何能 ...