(两种结构,两种方式)根据主表ID,查询子表的信息并用逗号分隔 MSSQL Server

摘要:
*/创建过程[dbo]。[sp_comma]@rnvarcharoutput,@showFieldnvarchar,--显示的字段名类似于'groupName'@tableNamenvarchar;--表名类似于:'s_AdminGroup'@whereFieldnvarchar';--条件字段名,如'iid'@where Valuenvarchar];--条件域值,如'2,7'@splitnvararchar=','ASdeclare@sqlnvarcharset@sql='set@g =''''; select@g=@g+isullfrom'+@tableName+'where'+@whereField+'in;if@g '''' set@g=子字符串'execsp_executesql@sql,N'@gnvarcharoutput',@routput--if@gname '' set@gname=子字符串GO
  •  结构一
根据主表ID,查询子表的信息并用逗号分隔
详情如下:

1主表:
select * from subcom

ID Name   
1 总公司 
2 公司1   
3 公司2   

2子表
select * from SubcomEarningOrg

ID SubCom EarningOrg
1 1 258
2 1 260
3 1 262
4 1 263
5 1 265
6 1 266
7 1 267
8 1 268
9 1 271
10 1 272
11 2 408
12 3 422

其中subcom 为主表的ID ,EarningOrg为另外一张基础表的ID。


基础表  
select * from BaseData

ID Name
258 一车队
260 二车队
262 三车队
263 四车队
265 五车队
266 六车队
267 七车队
268 八车队
271 九车队
272 十车队

现在要求查询出主表所对应的子表的所有在一条主表对应的记录并用逗号隔开如

主表Name 基础Name   
总公司 一车队,二车队,三车队,四车队,五车队,六车队,七车队,八车队,九车队,十车队

答: 这样来实现

create table t(id int,name nvarchar(30))
 
create table t1(id int,SubCom int, EarningOrg int)
 
create table t2(id int, name nvarchar(30))
  
insert into t
  
select 1'总公司' union all  
select 2'公司1' union all  
select 3'公司2'
insert into t1
select 11258 union all
select 21 ,260 union all
select 31 ,262 union all
select 41 ,263 union all
select 51 ,265 union all
select 61 ,266 union all
select 71 ,267 union all
select 81 ,268 union all
select 91 ,271 union all
select 101272 union all
select 112408 union all
select 123422  
insert into t2
select 258'一车队' union all  
select 260'二车队' union all
select 262'三车队' union all
select 263'四车队' union all
select 265'五车队' union all
select 266'六车队' union all
select 267'七车队' union all
select 268'八车队' union all
select 271'九车队' union all
select 272'十车队'
create function gY(@id as int)
returns nvarchar(100)
as  
begin
 
declare @s nvarchar(100)
 
set @s=''
 
select @s=@s+ISNULL(t2.name+',',''from t1,t2 where t1.SubCom=@id and t1.EarningOrg=t2.id
 
IF @s<>''
  
return substring(@s,1,len(@s)-1)
 
return ''   
end
go  
select name,基础name=dbo.gY(id) from t where dbo.gY(id)<>''
drop table t
drop table t1
drop table t2
  •  结构二
根据主表ID,查询子表的信息并用逗号分隔
详情如下:

1主表:
select * from subcom

ID Name   subid
1 总公司  258,260,262
2 公司1   408
3 公司2   422

2子表
select * from BaseData

ID Name
258 一车队
260 二车队
262 三车队
263 四车队
265 五车队
266 六车队
267 七车队
268 八车队
271 九车队
272 十车队

现在要求查询出主表所对应的子表的所有在一条主表对应的记录并用逗号隔开如

主表Name 基础Name   
总公司 一车队,二车队,三车队

SQL函数实现

/*
详细设计构思:http://www.cnblogs.com/chengulv/archive/2011/09/09/2172634.html
根据主键串 获得用逗号分割的其他字段内容。(如:总经理,业务员,仓库)
*/
CREATE   PROCEDURE [dbo].[sp_comma]
    @r nvarchar(4000) output,
    @showField nvarchar(255),  --显示的字段名 如: 'groupName'
    @tableName nvarchar(255),  --表名     如: 's_adminGroup'
    @whereField nvarchar(255), --条件字段名   如: 'iid'
    @whereValue nvarchar(255), --条件字段值   如: '2,7'
    @split nvarchar(2= ','
AS
declare @sql nvarchar(4000)
set @sql = 'set @g='''';select @g = @g + isnull(' + @showField + ' + ''' + @split + ''','''') from '+ @tableName + ' where '+ @whereField + ' in ('+ @whereValue + ');if @g<>'''' set @g = substring(@g,1,len(@g)-1)'
exec sp_executesql @sql, N'@g nvarchar(2000) output'@r output
--if @gname<>'' set @gname = substring(@gname,1,len(@gname)-1)
 

 




GO

免责声明:文章转载自《(两种结构,两种方式)根据主表ID,查询子表的信息并用逗号分隔 MSSQL Server》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Socket Connect问题基于802.11Fuzz技术的研究下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

怎样将shp文件的坐标点导出来?

单击以选择保存类型中的文本文件,将经度和纬度输出为txt格式。坐标系统有两个选项。第一个是数据源的坐标系。数据的数据源坐标系为UTM,投影坐标系,单位为米。第二个是我开始设置的数据帧的坐标系,即WGS84,单位为度。。。。直接将获得的点的坐标生成到文本文件中。如果它是栅格文件,则来自rastrastertopint的arctoolboxconverttool...

vue之文本渲染

以前,我们一直使用{{}}的形式来呈现文本,但除了此方法之外,vue还提供了其他几种常见的文本呈现方法:v-text:更新元素的innerTextv html:更新元素一次的innerHTMLv:静态插值v-pre:以原始格式输出v-cooke:保留元素上的指令,直到相关实例完成编译˂!幸运的是,Vue还提供了v-text和v-html来呈现文本或元素。...

uniapp中组件属性设置不生效的解决方案

例如,每次将滚动视图组件的滚动顶部属性值设置为0时,只能第一次成功返回顶部。组件中滚动顶部的实际值更改后,其绑定属性不会同时更改。...

等保2.0四级安全要求

平等保护2.0四级安全要求四级安全保护能力:应能够在统一的安全战略下,防止恶意攻击、严重自然灾害和来自国家一级、敌对组织和资源丰富的威胁源的其他严重危害造成的资源损害。它应该能够及时检测和监控攻击和安全事件,所有功能都可以快速恢复。以下粗体字段是平等保护的第4级和第3级之间的差异,应予以更多注意。...

vue的富文本编辑器使用,并且添加显示当前输入字数

{模块:{工具栏:{标题:{script://indent〔{direction:text align:background:}.editor{line-height:}.ql editor{line-high:content:padding right:...

Windows系统下MySQL添加到系统服务方法(mysql解压版)

您可能感兴趣的文章:Windows7中配置安装MySQL5.6解压缩版windows下安装、卸载mysql服务的方法Mysql5.7.11在windows10上的安装与配置(解压版)在Windows10上安装解压缩版MySql(推荐)Windows安装MySQL5.7.18解压版的教程windowsserver2016安装MySQL5.7.19解压缩版教程详...