首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

求SQL语句,一个字段中多个ID,怎么对他进行对应的值替换

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

求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

热点排行