行列互转

复制代码

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()


select top 5 * from test select top 5 * from test order by newid()

sql 行转 列, 列转行的更多相关文章

  1. SQL 行转列和列转行

    SQL 行转列和列转行 行列互转,是一个经常遇到的需求.实现的方法,有case when方式和2005之后的内置pivot和unpivot方法来实现. 在读了技术内幕那一节后,虽说这些解决方案早就用过 ...

  2. sql 行专列 列转行 普通行列转换

    转载:http://www.cnblogs.com/newwind521/archive/2010/11/25/1887203.html sql 行专列 列转行 普通行列转换 /* 标题:普通行列转换 ...

  3. sql 行转列 PIVOT 列转行 UNPIVOT

    原文:sql 行转列 PIVOT 列转行 UNPIVOT 一: 现有表一(t_table1),想转为表二(t_table2)的格式. 表一: 年 公司 收入 2013 公司1 12 2013 公司2 ...

  4. SQL Server 行转列,列转行。多行转成一列

    一.多行转成一列(并以","隔开) 表名:A 表数据: 想要的查询结果: 查询语句: SELECT name , value = ( STUFF(( SELECT ',' + va ...

  5. SQL行转列,列转行

    SQL 行转列,列转行 行列转换在做报表分析时还是经常会遇到的,今天就说一下如何实现行列转换吧. 行列转换就是如下图所示两种展示形式的互相转换 行转列 假如我们有下表: SELECT * FROM s ...

  6. Sql server 中将数据行转列列转行(二)

    老规矩,先弄一波测试数据,数据填充代码没有什么意义,先折叠起来: /* 第一步:创建临时表结构 */ CREATE TABLE #Student --创建临时表 ( StuName ), --学生名称 ...

  7. SQL2005语句实现行转列,列转行

    在做报表时,经常需要将数据表中的行转列,或者列转行,如果不知道方法,你会觉得通过SQL语句来实现非常难.这里,我将使用pivot和unpivot来实现看似复杂的功能.这个功能在sql2005及以上版本 ...

  8. Ms sql行转列。汇总

    SQL行转列汇总 PIVOT 用于将列值旋转为列名(即行转列),在 SQL Server 2000可以用聚合函数配合CASE语句实现 PIVOT 的一般语法是:PIVOT(聚合函数(列) FOR 列 ...

  9. sql 行转列总结

    原文:sql 行转列总结 PIVOT UNPIVOT的用法 PIVOT用于将列值旋转为列名(即行转列),在SQL Server 2000可以用聚合函数配合CASE语句实现 PIVOT的一般语法是:PI ...

  10. Sql 行转换为列 以及列转换为行的心得

    这是 创建数据库的脚本文件 CREATE TABLE [dbo].[stu]( [学号] [nvarchar](255) NOT NULL, [姓名] [nvarchar](255) NULL, [性 ...

随机推荐

  1. Failed to execute goal org.codehaus.cargo:cargo-maven2-plugin:1.2.3:run (default-cli) on project Maven_WebTest: Execution default-cli of goal org.codehaus.cargo:cargo-maven2-plugin:1.2.3:run failed: C

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...

  2. 5-touch 命令总结

  3. lineNumber: 1; columnNumber: 1; 前言中不允许有内容

    周六项目还能运行,也没修改什么,周一来了启动项目,竟然报错了~~~ 这是遇到的错误提示: Cause: org.xml.sax.SAXParseException; lineNumber: 1; co ...

  4. Mybatis学习--Mapper.xml映射文件

    简介 Mapper.xml映射文件中定义了操作数据库的sql,每个sql是一个statement,映射文件是mybatis的核心. 映射文件中有很多属性,常用的就是parameterType(输入类型 ...

  5. Java--剑指offer(7)

    31.求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1.10.11.12.13因此共出现6次,但是对于后面问题他就没辙了.AC ...

  6. oracle主键自增

    oracle主键自增 1建立数据表 create table Test_Increase(            userid number(10) primary key,  /*主键,自动增加*/ ...

  7. 【CodeVS 3160】最长公共子串

    http://codevs.cn/problem/3160/ 看了好久的后缀自动机_(:з」∠)_ 对A串建立SAM,用B串去匹配A串SAM,如果在当前节点走不下去,就跳到当前节点的parent(类似 ...

  8. 100114J

    经过思考后,很明显,我们可以看出应该是求出两条最长的链,链是指挂在连通块上的

  9. 利用MVC的自定义过滤器FilterAttribute、IActionFilter、IExceptionFilter实现异常处理等功能

    今天在博客园上看了一篇推荐文章,还说得蛮有道理: http://www.cnblogs.com/richieyang/p/4779028.html 项目中确实有各种后台验证过程,最常见的莫过于判空,而 ...

  10. unittest测试驱动之HTMLTestRunner.py

    对于自动化来说,测试报告是必须的,在敏捷化的团队中,团队中的成员需要自动化这边提供自动化的测试报告,来判断系统的整体质量以及下一步的测试策略.单元测试库生成测试输出到控制台的窗口上,但是这样的结果看起 ...