行列互转

复制代码

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. mac 设置阿里企业邮箱

    接收邮件服务器:pop3.mxhichina.com或pop3.您的域名,端口:110 发送邮件服务器:smtp.mxhichina.com或smtp.您的域名,端口:25 IMAP协议设置 接收邮件 ...

  2. php csv导出

    /** * 下载csv * @param unknown $orders_id * @param unknown $orders_date_start * @param unknown $orders ...

  3. 转 漫谈linux文件IO

    在Linux 开发中,有几个关系到性能的东西,技术人员非常关注:进程,CPU,MEM,网络IO,磁盘IO.本篇文件打算详细全面,深入浅出.剖析文件IO的细节.从多个角度探索如何提高IO性能.本文尽量用 ...

  4. 树分治 poj 1741

    n k n个节点的一棵树 k是距离 求树上有几对点距离<=k; #include<stdio.h> #include<string.h> #include<algo ...

  5. Echarts-axislabel文字过长导致显示不全或重叠

    先看两张图 按目前情况,官方并为对axislabel的高度或者宽度做调整.所以解决方案只能从其他方案下手 解决方案有几种 第一种为上图解决方案 设置grid属性定义图的大小来释放空间,使得axisla ...

  6. Jquery-分页插件paginaton案例

    本例使用的版本为jquery.pagination-1.2.6.js $("#id").page({ showInfo: false, showJump: false, showP ...

  7. Android中图像变换Matrix的原理、代码验证和应用(二)

    第二部分 代码验证 在第一部分中讲到的各种图像变换的验证代码如下,一共列出了10种情况.如果要验证其中的某一种情况,只需将相应的代码反注释即可.试验中用到的图片: 其尺寸为162 x 251. 每种变 ...

  8. Fiddler+Jmeter+断言详细教程

    一.Fiddler抓包工具的配置和使用 在编写网关自动化脚本之前,得先学会如何抓包,这里以Fiddler为例.会抓包的同学可以跳过这一步,当然看看也是没坏处的-- 局域网络配置 将要进行抓包的手机与电 ...

  9. Handler的postDelayed方法

    这是一种可以创建多线程消息的函数 使用方法:1,首先创建一个Handler对象 Handler handler=new Handler(); 2,然后创建一个Runnable对象 Runnable r ...

  10. asp.net mvc中应用缓存依赖文件(xml)的一个小demo

    最近项目中加了一个通用模块,就是根据一些特殊的tag,然后根据处理这些tag在同一个视图中加载不同的model(个人觉得此功能无任何意义,只是把不同的代码放在了同一个View中). 我的处理思路是这样 ...