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, [性 ...
随机推荐
- 【转】XSD (xml Schema Definition)
来自:http://www.cnblogs.com/newsouls/archive/2011/10/28/2227765.html Xml Schema的用途 1. 定义一个Xml文档中都有什么元 ...
- Simple File System
This is my operating system class design. scanner.h #include<string> using namespace std; #pra ...
- Webmin|Linux管理员远程管理工具
介绍: Webmin is a web-based interface for system administration for Unix. Using any modern web browser ...
- 在Go语言中使用JSON(去掉空字段)
Encode 将一个对象编码成JSON数据,接受一个interface{}对象,返回[]byte和error: func Marshal(v interface{}) ([]byte, error) ...
- PHP配置详解
[PHP] ;;;;;;;;;;;;;;;;;;; ; About php.ini ; ;;;;;;;;;;;;;;;;;;; ; This file controls many aspects of ...
- Android Bundle
#Bundle类介绍 Bundle主要用于传递数据:它保存的数据,是以key-value(键值对)的形式存在的. 我们经常使用Bundle在Activity之间传递数据,传递的数据可以是boolean ...
- redis的redis.conf文件详解
常用的: GENERAL: daemonize yes 守护进程 port 6379 指定Redis监听端口 requirepass 1 设置认证密码为1 REPLICATION: slave ...
- MySQL修改,表结构大幅修改
------------------create table t_video_file_temp( video_id bigint not null comment '视频Id', file_md5 ...
- Java Native Method
一.什么是java native method? "A native method is a Java method whose implementation is provided by ...
- mysql 备份恢复图
http://blog.csdn.net/oldboy8/article/details/8294631