最近工作需要,有一个关于数据库查询的问题,求高手解决:
有一个字典表,是一个分类表,大致内容如下:
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中都不知道怎么搜索,所以到这里来请教,请不吝赐教!
6 个解决方案
#1
replace
#2
replace,如何replace?
#3
用函数吧
SELECT ID,NAME,dbo.GetClassName(ClassID) from ProductTbl
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
#4
select Nam,class=stuff((select ','+[Nam] from tb1 where class like '%'+ tb1.ID +'%' for xml path('')),1,1,'') from tb2
#5
该语句有问题,但是提供了一种思路,谢谢!
#6
这个很好,解决了我的问题!
#1
replace
#2
replace,如何replace?
#3
用函数吧
SELECT ID,NAME,dbo.GetClassName(ClassID) from ProductTbl
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
#4
select Nam,class=stuff((select ','+[Nam] from tb1 where class like '%'+ tb1.ID +'%' for xml path('')),1,1,'') from tb2
#5
该语句有问题,但是提供了一种思路,谢谢!
#6
这个很好,解决了我的问题!