SQL Server连接GROUP BY
发布时间:2020-12-12 17:00:55 所属栏目:MsSql教程 来源:网络整理
导读:我有一个看起来像这样的查询 SELECT J.JobID,T.Title FROM JobsTagMap JLeft Join Tags TON J.TagID=T.TagID 返回以下数据集(简化,JobID实际上是UniqueIdentifier) JobID Title1 Tag11 Tag22 Tag22 Tag52 Tag9 现在,我想通过JobID列对其进行分组并连接Title,
我有一个看起来像这样的查询
SELECT J.JobID,T.Title FROM JobsTagMap J Left Join Tags T ON J.TagID=T.TagID 返回以下数据集(简化,JobID实际上是UniqueIdentifier) JobID Title 1 Tag1 1 Tag2 2 Tag2 2 Tag5 2 Tag9 现在,我想通过JobID列对其进行分组并连接Title,因此结果如下 JobID Title 1 Tag1,Tag2 2 Tag2,Tag5,Tag9 我该怎么做? 解决方法如果您使用的是sql server 2005.然后你可以这样做:SELECT JobsTagMap.JobID,STUFF ( ( SELECT ',' +Title FROM Tags WHERE Tags.TagID=JobsTagMap.TagID FOR XML PATH('') ),1,'') AS Title FROM JobsTagMap 编辑 因为您没有向我们展示表结构和不同表中的数据.这有点难以理解.所以我假设你的表结构看起来像这样: CREATE TABLE JobsTagMap ( JobID INT,TagID INT ) CREATE TABLE Tags ( TagID INT,Title VARCHAR(100) ) 有了这些数据: INSERT INTO JobsTagMap VALUES(1,1),(1,2),(2,4),5) INSERT INTO Tags VALUES(1,'Tag1'),'Tag2'),(3,(4,'Tag5'),(5,'Tag9') 如果您获得的是您显示的数据,则JobID不能是唯一的.您可能将Job表放在其唯一的某个位置.如果您只想使用您正在显示的这些表,那么您需要执行以下操作: ;WITH CTE AS ( SELECT ROW_NUMBER() OVER(PARTITION BY JobID ORDER BY JobID) AS RowNbr,JobsTagMap.* FROM JobsTagMap ) SELECT *,' +Title FROM Tags JOIN JobsTagMap ON Tags.TagID=JobsTagMap.TagID WHERE JobsTagMap.JobID=CTE.JobID FOR XML PATH('') ),'') AS Title FROM CTE WHERE CTE.RowNbr=1 这会得到这个结果: 1 1 1 Tag1,Tag2 1 2 2 Tag2,Tag9 所以将来总会显示什么表结构和它的数据.这会给你更好的答案 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
- Sql Server2012 使用IP地址登录服务器的配置图文
- SqlServer中decimal(numeric )、float 和 real 数
- SqlServer2005 自动备份并存储另一电脑上的存储过
- Sqlserver2005分区表实现步骤
- mysql 存储过程输入输出参数示例
- join – Access(Jet)SQL:TableB中的DateTime标记
- sql-server – 使用T-SQL测试字符串是否为回文结
- SQL SERVER 2014 安装图解教程(含SQL SERVER 20
- SQL Server SQL学习笔记七函数 数字,日期,类型
- 将GETDATE()与SQL Server中存储的GETDATE()进行比
热点阅读