利用SQl对数据库实行数据拆分与组合实现提供以下几种方案:

方法一:

WITH CTE AS (
SELECT A.Id,A.[Uid],UserName FROM (
SELECT A.[id], REPLACE(Split.a.value('.', 'NVARCHAR(max)'),'''','') AS [Uid]
FROM 
(
SELECT [id], CAST ('<M>' + REPLACE(Uid, ',', '</M><M>') + '</M>' AS XML) AS [Uid] FROM A
) AS A CROSS APPLY [Uid].nodes ('/M') AS Split(a)

) A INNER JOIN dbo.B B ON A.[Uid]=B.[Uid]
)
SELECT DISTINCT classList=stuff((select ',' +UserName from CTE B WHERE A.Id=B.Id for xml path('')),1,1,'') FROM CTE A

方法二:

SELECT t.id,classList=STUFF((
SELECT ','+tt1.UserName 
FROM A tt left join B tt1 ON ''+tt.Uid+',' like '%'+tt1.Uid+',%' 
WHERE tt.id=t.id FOR XML PATH('')),1,1,'')
FROM A t 
ORDER BY t.id

方法三:

select id, (select UserName from B where Uid=t02.item) c into #ttt from dbo.A as t01 cross apply dbo.split(t01.Uid,',') as t02

select id,stuff((select ','+c from dbo.#ttt as tb01 where tb01.id=tb02.id for xml path('')),1,1,'') as classList

from dbo.#ttt as tb02 group by id

drop table #ttt

方法三需要添加内置方法:

create function split(
@string varchar(255),
@separator varchar(255)
)returns @array table(item varchar(255))
as
begin
declare @begin int,@end int,@item varchar(255)
set @begin = 1
set @end=charindex(@separator,@string,@begin)
while(@end<>0)
begin
set @item = substring(@string,@begin,@end-@begin)
insert into @array(item) values(@item)
set @begin = @end+1
set @end=charindex(@separator,@string,@begin)
end
set @item = substring(@string,@begin,len(@string)+1-@begin)
if (len(@item)>0)
insert into @array(item) values(substring(@string,@begin,len(@string)+1-@begin))
return
end

下面们直接看结果吧:

表A:

表B:

最终结果:

跟根据讨论给出的方法,我个人给出这样的三种,如果有不对之处,请多多指教。

在这里我就不多文字咯,因为博客里面写再多文字别人看的时候都是看看最终是不是别人要的效果,是就学习不是直接拉到,欢迎各位朋友多多指教。

利用SQl对数据库实行数据拆分与组合的更多相关文章

  1. Python 学习 第17篇:从SQL Server数据库读写数据

    在Python语言中,从SQL Server数据库读写数据,通常情况下,都是使用sqlalchemy 包和 pymssql 包的组合,这是因为大多数数据处理程序都需要用到DataFrame对象,它内置 ...

  2. 如何用asp.net MVC框架、highChart库从sql server数据库获取数据动态生成柱状图

    如何用asp.net MVC框架.highChart库从sql server数据库获取数据动态生成柱状图?效果大概是这样的,如图: 请问大侠这个这么实现呢?

  3. JMeter 利用Jmeter批量数据库插入数据

    利用Jmeter批量数据库插入数据   by:授客 QQ:1033553122 1.   启动Jmeter 2.   添加 DBC Connection Configuration 右键线程组-> ...

  4. 漫谈可视化Prefuse(一)---从SQL Server数据库读取数据

    上篇<可视化工具solo show-----Prefuse自带例子GraphView讲解>主要介绍了整个Prefuse工具集具有的一些特征.框架的运行流程,分析并展现了官方提供的例子Gra ...

  5. JMeter 参数化之利用JDBCConnectionConfiguration从数据库读取数据并关联变量

    参数化之利用DBC Connection Configuration从数据库读取数据并关联变量   by:授客 QQ:1033553122 1.   下载mysql jar包 下载mysql jar包 ...

  6. SQL Server数据库读取数据的DateReader类及其相关类

    之前学了几天的SQL Server,现在用C#代码连接数据库了. 需要使用C#代码连接数据库,读取数据. 涉及的类有: ConfigurationManage SqlConnection SqlCom ...

  7. 用SQL语句将远程SQL Server数据库中表数据导入到本地数据库相应的表中

    一.方法一 访问不同电脑上的数据库(远程访问,只好联好网就一样),如果经常访问或数据量较大,建议用链接服务器方法. 1.创建链接服务器 exec sp_addlinkedserver ‘srv_lnk ...

  8. Jmeter—8 连接microsoft sql server数据库取数据

    本文以Jmeter 连接microsoft sql server为例. 1 从微软官网下载Microsoft SQL Server JDBC Driver 地址:http://www.microsof ...

  9. MVC3+Linq to sql 显示数据库中数据表的数据

    1:首先创建asp.net mvc3应用程序 2:创建项目完成后 找到controllers文件鼠标右击选择添加控制器 3 为models文件夹添加一个linq to sql类文件,然后把数据库中的数 ...

随机推荐

  1. shell 输出九九乘法表

    #/bin/bash i= j= )) do while(($j<=$i)) do echo -ne $j×$i=$[$j*$i]"\t" j=$[$j+] done ech ...

  2. js与jq对数组的操作

    一.数组处理 1.数组的创建  var arrayObj = new Array(); //创建一个数组  var arrayObj = new Array([size]); //创建一个数组并指定长 ...

  3. Fedora 安装gcc gcc-c++

    Fedora本身没有自带gcc 和 g++编译器,所以需要我们自己去安装,步骤如下: 1.切换到root用户(或者跳过这个步骤,直接在下面命令前面加上 sudo) su root 2.安装gcc yu ...

  4. startUML破解方式

    StarUML官方下载地址:http://staruml.io/download StarUML是一个非常好用的画UML图的工具,但是它是收费软件​,以下是破解方法: ​1.使用Editplus或者N ...

  5. (2)WebAPI的增删改查

    using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Ne ...

  6. Duilib源码分析(三)XML解析器—CMarkup

    上一节介绍了控件构造器CDialogBuilder,接下来将分析其XML解析器CMarkup: CMarkup:xml解析器,目前内置支持三种编码格式:UTF8.UNICODE.ASNI,默认为UTF ...

  7. WooCommerce

    http://devework.com/woocommerce.html https://woocommerce.com/ https://woocommerce.com/product-catego ...

  8. LOL(英雄联盟)提示不支持虚拟机登录,解决方法

    搜索虚拟系统下的存放文件索 .VMX 会出现带有.VMX 的文件(比如Windows 7.vmx)用记事本打开在最后面回车再加入一行:monitor_control.restrict_backdoor ...

  9. [翻译] ORMLite document -- Getting Started

    前言 此文档翻译于第一次学习 ORMLite 框架,如果发现当中有什么不对的地方,请指正.若翻译与原文档出现任何的不相符,请以原文档为准.原则上建议学习原英文文档. ----------------- ...

  10. Problem of saving images in WPF (RenderTargetBitmap)zz

      To save a visual to an image file need to use RenderTargetBitmap, detail is reference to Save and ...