读书人

求SQL语句一个字段中多个ID怎么对

发布时间: 2013-06-19 10:26:41 作者: rapoo

求SQL语句,一个字段中多个ID,如何对他进行对应的值替换?
一直没有怎么专门的学习SQL,对其也只是一般性的了解!

最近工作需要,有一个关于数据库查询的问题,求高手解决:
有一个字典表,是一个分类表,大致内容如下:
ClassTbl:
ID Name
001 分类1
002 分类2
003 分类3
004 分类4
005 分类5
… …
ProductTbl:
ID Name ClassID
001 产品1 002,003
002 产品2 001,003,004
003 产品3 003
004 产品4 002,003,004
005 产品5 001,002,003,004,005
… … …

现在希望查询出来的结果是将ProductTbl表中的ClassID替换成名称,即:
产品1 分类2,分类3
产品2 分类1,分类3,分类4
产品3 分类3
产品4 分类2,分类3,分类4
产品5 分类1,分类2,分类3,分类4,分类5
… …

在baidu和google中都不知道怎么搜索,所以到这里来请教,请不吝赐教!
[解决办法]
用函数吧

CREATE  FUNCTION GetClassName(@ClassID VARCHAR(MAX))
RETURNS NVARCHAR(MAX)
AS
BEGIN
DECLARE @ClassName NVARCHAR(MAX)
SELECT @ClassName = ''

WHILE @ClassID <> ''
BEGIN
DECLARE @Position INT
SELECT @Position = CHARINDEX(',',@ClassID)

IF @Position > 0
BEGIN
SELECT @ClassName = @ClassName + NAME + ',' FROM classtbl WHERE ID = SUBSTRING(@ClassID,1,@Position - 1);
SET @ClassID = SUBSTRING(@ClassID,@Position + 1 ,LEN(@ClassID)-@Position + 1);
END
ELSE
BEGIN
SELECT @ClassName = @ClassName + NAME FROM classtbl WHERE ID = @ClassID
SET @ClassID = ''
END

END

RETURN @ClassName
END

SELECT ID,NAME,dbo.GetClassName(ClassID) from ProductTbl
[解决办法]
select Nam,class=stuff((select ','+[Nam] from tb1 where class like '%'+ tb1.ID +'%' for xml path('')),1,1,'') from tb2

读书人网 >SQL Server

热点推荐