日度归档:2018年8月29日

mssql sqlserver 使用count获取group by 分组后的个数方法


摘要:
下文将分享三种统计分组后行数的方法分享,如下所示:
实验环境:sql server 2008 R2


例:
获取表test中infoA和infoB列值不相同的行数

 create table test
(keyid int identity,
 infoA varchar(30),
 infoB varchar(30))
insert into test 
(infoA,infoB)values
('maomao365.com','sql_blog'),
('A','B'),
('maomao365.com','sql_blog'),
('maomao365.com','sql_blog'),
('test','sql_blog')

---1.使用row_number开窗函数 ,进行群组后,然后获取组内编号为1的行信
select COUNT(1)  from (
select ROW_NUMBER()
over(partition by infoA,infoB order by keyId asc) 
as keyIdnew 
 from test ) as t where t.keyIdNew =1 
go
---2 使用count distinct 统计
select COUNT(distinct infoA+'-'+infoB) 
 from test 
 
--3 使用count和group by 子查询统计
select COUNT(1) from (
select COUNT(1) as q,infoA,infoB from test 
  group by infoA,infoB 
)as t
 
go
truncate table test
drop     table test
mssql_sqlserver_count_统计群组后行数信息

mssql_sqlserver_count_统计群组后行数信息

mssql sqlserver 从一张表更新数据至另一张表的方法分享


摘要:
下文讲述sqlserver中将一张表中的指定字段中的值更新至另外一张表的方法分享,如下所示:
实验环境:sqlserver 2008 R2


例:
有表testA、testB
当testB中keyId等于testA中的keyId时,将testB中的testBName更新至testA表中的testAName

  update testA 
  set testA.testAName = testB.testBName 
   from testB where  testA.keyId = testB.keyId 
 

mssql sqlserver 使用convert/cast截取字符串的方式分享


摘要:
下文讲述从字符串开始位置截取字符串的另类方式,
此方法主要使用 convert 或cast 将字符串转换为指定数据格式的方式来截取字符串的方式


例:截取表test中字段info的前三位字符,方法如下所示:
使用convert 或cast 将字符串转换为nvarchar(3)位,使其只截取3个字符串

create table test
(keyId int identity,
 info  varchar(100)
 )
 insert into test 
 (info)values
 ('maomao365.com'),
 ('猫猫小屋') ,
 ('sql_教程')
 
 select keyId,CONVERT(nvarchar(2),info) as info ,
 CAST(info as nvarchar(3)) as infonew 
  from test 
 
 truncate table test
 drop     table test 
mssql_sqlserver_截取字符串的另类方式_格式转换分享

mssql_sqlserver_截取字符串的另类方式_格式转换分享