通过逗号分隔的ID获取逗号分隔的名称

ideasky 2010-12-10 07:26:56
标题有点绕嘴,表如下
Category
CID SpecId CName
1 1,2,3 衣服
2 2,3 鞋
3 4,1 帽子

ItemSpecs
SpecId SpecName
1 颜色
2 尺码
3 样式
4 风格

表Category中SpecId和ItemSpecs是多对1关系

需求是,查询Category表得到逗号分隔的SpecName,如下所示:
CID SpecId SpecName CName
1 1,2,3 颜色,尺码,样式 衣服
2 2,3尺码,样式 鞋
...全文
266 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
ideasky 2010-12-10
  • 打赏
  • 举报
回复
可用,谢谢回复!
飘零一叶 2010-12-10
  • 打赏
  • 举报
回复
不够严密改一下。
SELECT CID
,SpecId
,STUFF((SELECT ','+SpecName FROM TB WHERE CHARINDEX(','+LTRIM(TB.SpecId)+',',','+TA.SpecId+',')>0 FOR XML PATH('')),1,1,'') AS COL
,CName
FROM TA
飘零一叶 2010-12-10
  • 打赏
  • 举报
回复
IF OBJECT_ID('TB') IS NOT NULL DROP TABLE TB
GO
IF OBJECT_ID('TA') IS NOT NULL DROP TABLE TA
GO
CREATE TABLE TA
(
CID INT IDENTITY,
SpecId VARCHAR(10),
CName NVARCHAR(10)
)
INSERT INTO TA
SELECT '1,2,3','衣服' UNION ALL
SELECT '2,3','鞋' UNION ALL
SELECT '4,1','帽子'

CREATE TABLE TB
(
SpecId INT IDENTITY,
SpecName NVARCHAR(10)
)
INSERT INTO TB
SELECT '颜色' UNION ALL
SELECT '尺码' UNION ALL
SELECT '样式' UNION ALL
SELECT '风格'

SELECT CID
,SpecId
,STUFF((SELECT ','+SpecName FROM TB WHERE CHARINDEX(LTRIM(TB.SpecId),TA.SpecId)>0 FOR XML PATH('')),1,1,'') AS COL
,CName
FROM TA
CID SpecId COL CName
--- ------ ------ ------
1 1,2,3 颜色,尺码,样式 衣服
2 2,3 尺码,样式 鞋
3 4,1 颜色,风格 帽子


34,588

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧