日度归档:2019年4月13日

mssql sqlserver 使用sql脚本将字符串数据进行聚合的方法分享


摘要:
下文讲述使用sql脚本对字符串数据进行聚合的方法分享
实验环境:sql server 2012


下文通过举例的方式,讲述字符串的聚合操作方法,如下所示:
将员工的技能信息转换为每位员工一行信息的方法

    create table [员工技能表](姓名  nvarchar(10),技能 nvarchar(10))
 
insert into [员工技能表](姓名,技能)
 select '猫猫', '机修' union all
 select '妞妞', '钣金' union all
 select '美美', '喷漆' union all
 select '猫猫', '美容' union all
 select '猫猫', '发动机大修' union all
 select '妞妞', '换机油'


select 姓名,
       技能汇总=string_agg(技能,',')
 from  [员工技能表]
 group by 姓名

mssql sqlserver sql脚本中表别名的另类实现方法


摘要:
下文讲述sql脚本中表别名的另类实现方法,如下所示:
实验环境:sql server 2008 R2


通常表别名的写法中,我们采用as关键字生成新的列名,下文讲述采用等于的方法生成新列名,如下所示:

  select  [名称] = name from sysobjects 

mssql sqlserver union关键字同order by 关键字一起报错的处理方法分享


摘要:
下文讲述union关键字和order by 关键字一起应用时,sql产生错误的处理方法,如下:
实验环境:sql server 2008 R2


例:
员工表 包含(姓名,年龄)两个字段
大客户表 包含(姓名,年龄)两个字段

   select [姓名],[年龄]  from [员工表] order by [姓名] 
   union 
   select [姓名],[年龄]  from [大客户表] order by [姓名] 
   ---此脚本的运行,会产生union附近存在脚本错误的现象 
  


在sqlserver脚本编写中,当order by 和union同处一层时,此时sql脚本会产生相应的错误,因为需将order by关键字放入外层或内层后,此异常久得到解决了

正确的order by 同union的写法如下所示:

  ---写法1:
  select * from ( select [姓名],[年龄]  from [员工表] order by [姓名] ) A
   union 
  select * from ( select [姓名],[年龄]  from [大客户表] order by [姓名] )B
  
  ---写法2:
   select * form 
  (
     select [姓名],[年龄]  from [员工表]  
   union 
   select [姓名],[年龄]  from [大客户表] 
  ) order by [姓名]