标签归档:数据库

mssql sqlserver 使用sql取重复数据中的最小的一条的方法分享


摘要:
下文讲述当数据表中数据重复时,我们取排序后最小一条的方法分享,如下所示:
实验环境:sql server 2008 R2


在日常的数据查询中,我们常常会遇见一些问题,例:
如果表中两个字段重复,则取最先插入的那条数据,那么我们该如何编写sql脚本呢?
下文将讲述使用row_number开窗函数对群组内的数据进行依次排序,然后取最小的一条数据,具体实现方法如下所示:

create table [maomao365.com]
([列1]  nvarchar(30),
 [列2]  nvarchar(30),
 [排序] int identity )
go

insert into [maomao365.com]
([列1],[列2])values(N'人事部',N'人事部'),
(N'行政部',N'行政部'),
(N'财务部',N'其它部门'),
(N'人事部',N'人事部'),
(N'销售部',N'总裁办'),
(N'行政部',N'行政部')

go

select * from 
 (
  select *,row_number()
   over(partition by [列1],[列2] 
    order by [排序] asc) as keyId  from  [maomao365.com] 
 )
 as t 
where t.keyId =1 
 


go
truncate table [maomao365.com]
drop     table [maomao365.com]
mssql_sqlserver_重复数据取一条_9404

mssql_sqlserver_重复数据取一条_9404

mssql sqlserver 使用sql脚本 “转换整型为字符串时”不足位数时左边补0的方法分享


摘要:
下文讲述使用sql脚本转换整型,不足位数的处理方法,如下:
实验环境:sql server 2008 R2


实现思路:
先使用 指定位数的的0字符串和整型转换后的字符串进行叠加,然后使用right从右边取字符串,就可以达到位数不足补零的效果

例:对一个整型数字转换为一个8位的字符串,如果不足位数时,左边补零

  declare @a varchar(8) 
   set @a ='00000000'   ---定义一个8位的字符串
  
 declare @i int 
   set @i =188
  
  ---将188数字转换为一个8位字符串,如果不足位数时,左边补零
   
  select right(@a+cast(@i as varchar(10)),8)
  ----或-------
 select right(@a+convert(@i,varchar(10)),8) 

mssql sqlserver 将多行数据合并为一行的三种方法分享


摘要:
下文讲述使用sql脚本将多行数据合并为一行的三种方法,如下所示:
实验环境:sql server


在一些数据库的应用中,我们常常需要将多行数据行合并为一行,然后提供给前端使用,如下:

例:
有一张数据表包含以下三行数据
人事部
行政部
财务部
现在需要我们将数据转换为
人事部,行政部,财务部


方法1:使用临时变量进行数据叠加

    
create table [maomao365.com]
(info nvarchar(20))
go

insert into [maomao365.com]
(info)values(N'人事部'),
(N'行政部'),
(N'财务部')
go


DECLARE @infoAll VARCHAR(MAX);
SELECT @infoAll = ISNULL(@infoAll+',','')+ info
FROM [maomao365.com]

SELECT @infoAll


go
truncate table [maomao365.com]
drop     table [maomao365.com]
  


方法2:使用for xml path 和stuff系统函数生成

 
    SELECT ',' + info  
    FROM [maomao365.com] for xml path('')

  


方法3:使用 STRING_AGG系统函数生成

 
    /*
    在sqlserver 2017中,我们可以使用系统函数  STRING_AGG 将多行数据合并为一行
    */ 
SELECT STRING_AGG(ISNULL(info,'N/A'), ',') 
FROM [maomao365.com]