一列保存多个ID将多个用逗号隔开的ID转换成用逗号隔开的名称10页.docx
- 文档编号:15245413
- 上传时间:2023-07-02
- 格式:DOCX
- 页数:8
- 大小:18.11KB
一列保存多个ID将多个用逗号隔开的ID转换成用逗号隔开的名称10页.docx
《一列保存多个ID将多个用逗号隔开的ID转换成用逗号隔开的名称10页.docx》由会员分享,可在线阅读,更多相关《一列保存多个ID将多个用逗号隔开的ID转换成用逗号隔开的名称10页.docx(8页珍藏版)》请在冰点文库上搜索。
一列保存多个ID将多个用逗号隔开的ID转换成用逗号隔开的名称10页
在做项目时,经常会遇到这样的表结构在主表的中有一列保存的是用逗号隔开ID
教师范读的是阅读教学中不可缺少的部分,我常采用范读,让幼儿学习、模仿。
如领读,我读一句,让幼儿读一句,边读边记;第二通读,我大声读,我大声读,幼儿小声读,边学边仿;第三赏读,我借用录好配朗读磁带,一边放录音,一边幼儿反复倾听,在反复倾听中体验、品味。
“教书先生”恐怕是市井百姓最为熟悉的一种称呼,从最初的门馆、私塾到晚清的学堂,“教书先生”那一行当怎么说也算是让国人景仰甚或敬畏的一种社会职业。
只是更早的“先生”概念并非源于教书,最初出现的“先生”一词也并非有传授知识那般的含义。
《孟子》中的“先生何为出此言也?
”;《论语》中的“有酒食,先生馔”;《国策》中的“先生坐,何至于此?
”等等,均指“先生”为父兄或有学问、有德行的长辈。
其实《国策》中本身就有“先生长者,有德之称”的说法。
可见“先生”之原意非真正的“教师”之意,倒是与当今“先生”的称呼更接近。
看来,“先生”之本源含义在于礼貌和尊称,并非具学问者的专称。
称“老师”为“先生”的记载,首见于《礼记?
曲礼》,有“从于先生,不越礼而与人言”,其中之“先生”意为“年长、资深之传授知识者”,与教师、老师之意基本一致。
背景:
在做项目时,经常会遇到这样的表结构在主表的中有一列保存的是用逗号隔开ID。
如,当一个员工从属多个部门时、当一个项目从属多个城市时、当一个设备从属多个项目时,很多人都会在员工表中加入一个deptIdsVARCHAR(1000)列(本文以员工从属多个部门为例),用以保存部门编号列表(很明显这不符合第一范式,但很多人这样设计了,在这篇文章中我们暂不讨论在这种应用场景下,如此设计的对与错,有兴趣的可以在回复中聊聊),然后我们在查询列表中需要看到这个员工从属哪些部门。
初始化数据:
部门表、员工表数据:
要练说,得练看。
看与说是统一的,看不准就难以说得好。
练看,就是训练幼儿的观察能力,扩大幼儿的认知范围,让幼儿在观察事物、观察生活、观察自然的活动中,积累词汇、理解词义、发展语言。
在运用观察法组织活动时,我着眼观察于观察对象的选择,着力于观察过程的指导,着重于幼儿观察能力和语言表达能力的提高。
唐宋或更早之前,针对“经学”“律学”“算学”和“书学”各科目,其相应传授者称为“博士”,这与当今“博士”含义已经相去甚远。
而对那些特别讲授“武事”或讲解“经籍”者,又称“讲师”。
“教授”和“助教”均原为学官称谓。
前者始于宋,乃“宗学”“律学”“医学”“武学”等科目的讲授者;而后者则于西晋武帝时代即已设立了,主要协助国子、博士培养生徒。
“助教”在古代不仅要作入流的学问,其教书育人的职责也十分明晰。
唐代国子学、太学等所设之“助教”一席,也是当朝打眼的学官。
至明清两代,只设国子监(国子学)一科的“助教”,其身价不谓显赫,也称得上朝廷要员。
至此,无论是“博士”“讲师”,还是“教授”“助教”,其今日教师应具有的基本概念都具有了。
复制代码代码如下:
“教书先生”恐怕是市井百姓最为熟悉的一种称呼,从最初的门馆、私塾到晚清的学堂,“教书先生”那一行当怎么说也算是让国人景仰甚或敬畏的一种社会职业。
只是更早的“先生”概念并非源于教书,最初出现的“先生”一词也并非有传授知识那般的含义。
《孟子》中的“先生何为出此言也?
”;《论语》中的“有酒食,先生馔”;《国策》中的“先生坐,何至于此?
”等等,均指“先生”为父兄或有学问、有德行的长辈。
其实《国策》中本身就有“先生长者,有德之称”的说法。
可见“先生”之原意非真正的“教师”之意,倒是与当今“先生”的称呼更接近。
看来,“先生”之本源含义在于礼貌和尊称,并非具学问者的专称。
称“老师”为“先生”的记载,首见于《礼记?
曲礼》,有“从于先生,不越礼而与人言”,其中之“先生”意为“年长、资深之传授知识者”,与教师、老师之意基本一致。
要练说,得练听。
听是说的前提,听得准确,才有条件正确模仿,才能不断地掌握高一级水平的语言。
我在教学中,注意听说结合,训练幼儿听的能力,课堂上,我特别重视教师的语言,我对幼儿说话,注意声音清楚,高低起伏,抑扬有致,富有吸引力,这样能引起幼儿的注意。
当我发现有的幼儿不专心听别人发言时,就随时表扬那些静听的幼儿,或是让他重复别人说过的内容,抓住教育时机,要求他们专心听,用心记。
平时我还通过各种趣味活动,培养幼儿边听边记,边听边想,边听边说的能力,如听词对词,听词句说意思,听句子辩正误,听故事讲述故事,听谜语猜谜底,听智力故事,动脑筋,出主意,听儿歌上句,接儿歌下句等,这样幼儿学得生动活泼,轻松愉快,既训练了听的能力,强化了记忆,又发展了思维,为说打下了基础。
IFEXISTS(SELECT*FROMsys.objectsWHEREobject_id=OBJECT_ID(N'[dbo].[Department]'))
DROPTABLE[dbo].Department
GO
--部门表
CREATETABLEDepartment
(
idint,
namenvarchar(50)
)
INSERTINTODepartment(id,name)
SELECT1,'人事部'
UNION
SELECT2,'工程部'
UNION
SELECT3,'管理部'
SELECT*FROMDepartment
IFEXISTS(SELECT*FROMsys.objectsWHEREobject_id=OBJECT_ID(N'[dbo].[Employee]'))
DROPTABLE[dbo].Employee
GO
--员工表
CREATETABLEEmployee
(
idint,
namenvarchar(20),
deptIdsvarchar(1000)
)
INSERTINTOEmployee(id,name,deptIds)
SELECT1,'蒋大华','1,2,3'
UNION
SELECT2,'小明','1'
UNION
SELECT3,'小华',''
SELECT*FROMEmployee
希望得到的结果:
解决方法:
第一步,是得到如下的数据。
即将员工表集合与相关的部门集合做交叉连接,其中使用了fun_SplitIds函数(作用是将ids分割成id列表),然后员工集合与这个得到的集合做交叉连接
复制代码代码如下:
SELECTE.*,ISNULL(D.name,'')ASdeptName
FROMEmployeeASE
OUTERAPPLYdbo.fun_SplitIds(E.deptIds)ASDID
LEFTJOINDepartmentASDONDID.ID=D.id;
第二步,已经得到了如上的数据,然后要做的就是根据ID分组,并对deptName列做聚合操作,但可惜的是SQLSERVER还没有提供对字符串做聚合的操作。
但想到,我们处理树形结构数据时,用CTE来做关系数据,做成有树形格式的数据,如此我们也可以将这个问题转换成做树形格式的问题,代码如下:
复制代码代码如下:
;WITHEmployeTAS(
--员工的基本信息(使用OUTERAPPLY将多个ID拆分开来,然后与部门表相关联)
--此时已将员工表所存的IDS分别与部门相关联,下面需要将此集合中的deptName聚合成一个记录
SELECTE.*,ISNULL(D.name,'')ASdeptName
FROMEmployeeASE
OUTERAPPLYdbo.fun_SplitIds(E.deptIds)ASDID
LEFTJOINDepartmentASDONDID.ID=D.id
),mikeAS(
SELECTid,name,deptIds,deptName
ROW_NUMBER()OVER(PARTITIONBYidORDERBYid)ASlevel_num
FROMEmployeT
),mike2AS(
SELECTid,name,deptIds,CAST(deptNameASNVARCHAR(100))ASdeptName,level_num
FROMmike
WHERElevel_num=1
UNIONALL
SELECTm.id,m.name,m.deptIds,CAST(m2.deptName+','+m.deptNameASNVARCHAR(100))ASdeptName,m.level_num
FROMmikeASm
INNERJOINmike2ASm2ONm.ID=m2.idANDm.level_num=m2.level_num+1
),maxMikeByIDTAS(
SELECTid,MAX(level_num)ASlevel_num
FROMmike2
GROUPBYID
)
SELECTA.id,A.name,A.deptIds,A.deptName
FROMmike2ASA
INNERJOINmaxMikeByIDTASBONA.id=B.IDANDA.level_num=B.level_num
ORDERBYA.idOPTION(MAXRECURSION0)
结果如下:
全部SQL:
复制代码代码如下:
IFEXISTS(SELECT*FROMsys.objectsWHEREobject_id=OBJECT_ID(N'[dbo].[Department]'))
DROPTABLE[dbo].Department
GO
--部门表
CREATETABLEDepartment
(
idint,
namenvarchar(50)
)
INSERTINTODepartment(id,name)
SELECT1,'人事部'
UNION
SELECT2,'工程部'
UNION
SELECT3,'管理部'
SELECT*FROMDepartment
IFEXISTS(SELECT*FROMsys.objectsWHEREobject_id=OBJECT_ID(N'[dbo].[Employee]'))
DROPTABLE[dbo].Employee
GO
--员工表
CREATETABLEEmployee
(
idint,
namenvarchar(20),
deptIdsvarchar(1000)
)
INSERTINTOEmployee(id,name,deptIds)
SELECT1,'蒋大华','1,2,3'
UNION
SELECT2,'小明','1'
UNION
SELECT3,'小华',''
SELECT*FROMEmployee
--创建一个表值函数,用来拆分用逗号分割的数字串,返回只有一列数字的表
IFEXISTS(SELECT*FROMsys.objectsWHEREobject_id=OBJECT_ID(N'[dbo].[fun_SplitIds]'))
DROPFUNCTION[dbo].fun_SplitIds
GO
CREATEFUNCTIONdbo.fun_SplitIds(
@Idsnvarchar(1000)
)
RETURNS@t_idTABLE(idVARCHAR(36))
AS
BEGIN
DECLARE@iINT,@jINT,@lINT,@vVARCHAR(36);
SET@i=0;
SET@j=0;
SET@l=len(@Ids);
while(@j<@l)
begin
SET@j=charindex(',',@Ids,@i+1);
IF(@j=0)set@j=@l+1;
SET@v=cast(SUBSTRING(@Ids,@i+1,@j-@i-1)asVARCHAR(36));
INSERTINTO@t_idVALUES(@v)
SET@i=@j;
END
RETURN;
END
GO
iniot
;WITHEmployeTAS(
--员工的基本信息(使用OUTERAPPLY将多个ID拆分开来,然后与部门表相关联)
--此时已将员工表所存的IDS分别与部门相关联,下面需要将此集合中的deptName聚合成一个记录
SELECTE.*,ISNULL(D.name,'')ASdeptName
FROMEmployeeASE
OUTERAPPLYdbo.fun_SplitIds(E.deptIds)ASDID
LEFTJOINDepartmentASDONDID.ID=D.id
),mikeAS(
SELECTid,name,deptIds,deptName
ROW_NUMBER()OVER(PARTITIONBYidORDERBYid)ASlevel_num
FROMEmployeT
),mike2AS(
SELECTid,name,deptIds,CAST(deptNameASNVARCHAR(100))ASdeptName,level_num
FROMmike
WHERElevel_num=1
UNIONALL
SELECTm.id,m.name,m.deptIds,CAST(m2.deptName+','+m.deptNameASNVARCHAR(100))ASdeptName,m.level_num
FROMmikeASm
INNERJOINmike2ASm2ONm.ID=m2.idANDm.level_num=m2.level_num+1
),maxMikeByIDTAS(
SELECTid,MAX(level_num)ASlevel_num
FROMmike2
GROUPBYID
)
SELECTA.id,A.name,A.deptIds,A.deptName
FROMmike2ASA
INNERJOINmaxMikeByIDTASBONA.id=B.IDANDA.level_num=B.level_num
ORDERBYA.idOPTION(MAXRECURSION0)
希望以上资料对你有所帮助,附励志名言3条:
1、要接受自己行动所带来的责任而非自己成就所带来的荣耀。
2、每个人都必须发展两种重要的能力适应改变与动荡的能力以及为长期目标延缓享乐的能力。
3、将一付好牌打好没有什么了不起能将一付坏牌打好的人才值得钦佩。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 一列 保存 ID 将多个用 逗号 隔开 转换 名称 10