sql查询拆分问题

编程入门 行业动态 更新时间:2024-10-28 01:17:37
本文介绍了sql查询拆分问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我有一个标准化的表格,包含这样的数据

I have a normalized table having data like this

Gid Gname 1 dance 2 cricket 3 football

在我的表中我保存这样的数据

In my table i am saving data like this

ID GID SID 1 1,3 101 2 3 102 3 1,2,3 103

我想要这样的输出

I want output like this

SID GName 101 dance,football 102 football 103 dance,cricket,football

谁可以在sql 2008中编写此查询

Who can i write this query in sql 2008

推荐答案

你可以用两种方式来做...使用 Fnsplitter 函数或联接... U can do it in two ways... Either Using Fnsplitter Function or joins... Create Table #Temp ( Id int, Gid Nvarchar(40), Sid Nvarchar(40) ) Create Table #Dept ( Gid Nvarchar(40), Gname Nvarchar(40) ) Insert into #Temp Select 1,'1,3','101' Union all Select 2,'3','102' Union all Select 3,'1,2,3','103' Insert into #Dept Select '1','dance' Union All Select '2','cricket' Union All Select '3','football' -- If u have fnsplitter u can use this.... --Select t.Sid,Stuff((Select ','+Gname From #Dept -- Where Gid In (Select ID From fnSplitter(t.Gid)) -- For XML Path(''), TYPE).value('.','VARCHAR(max)'), 1, 1, '') [Gname] --From #Temp t -- With out Fnsplitter SELECT e.Sid, STUFF((SELECT ',' + d.Gname FROM #Dept AS d INNER JOIN #Temp AS t ON ',' + t.Gid + ',' LIKE '%,' + CONVERT(VARCHAR(12), d.Gid) + ',%' WHERE t.Gid = e.Gid ORDER BY Gname FOR XML PATH, TYPE).value('.', 'nvarchar(max)'), 1, 1, '') as Gname FROM #Temp AS e ORDER BY Sid; Drop Table #Temp Drop Table #Dept

输出:

Output:

Sid Gname ----- --------- 101 dance,football 102 football 103 cricket,dance,football

更多推荐

sql查询拆分问题

本文发布于:2023-10-26 07:30:32,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1529486.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:sql

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!