ESAP达摩院 思想有多远,我们就能走多远

ES记录合并与拆分


概述

有些时候我们用逗号分隔多个值,另外一些时候又需要把这些值单独拆开。

在ES中,两者之间的转化可以通过数据库视图来快速实现。

记录合并

  • 典型的记录合并需求就是把单独记录合并为组,某些字段值用逗号分开。

数据库实现过程:

  • 建立ES模板,填入数据。

  • 建立数据库函数。
create function f_mergaChar(#Dept varchar(50))
returns varchar(6000)
as
begin
declare #values varchar(6000)
select @values=isnull(@values + ',','') + 姓名
from 合并测试_D where 部门=@Dept
return @values
end
  • 建立ES视图,调用函数获取合并结果集。

记录拆分

  • 记录拆分就是把合并的记录(逗号分隔)拆分为单独记录。

实现过程:

  • 建立ES模板,填入数据。

  • 建立ES视图,获取拆分结果集。

小结

  1. 记录合并在sql2000中需要使用自定义函数,在ES视图中调用函数实现。

  2. 记录拆分也类似,如果有基础表作为辅助,也可以直接通过ES视图实现,例如本文示例。

  3. 其他类似方法还有许多,例如SQL2005中的CTE递归等,本文为SQL2000下的解决方案。

  4. 其他进阶方案请参考宝典3.12节

村长点评:使用nxcells和sql2008+可以直接在提数中用for xml path来合并记录,更快更方便。


近似文章