我的目的是为了实现将B表中的多条记录中的某个字段按照一定的规则连接成一个字符串字段和A表一块输出,有位大大给出了解决办法,但是那个格式太简单,我需要遍历整个查询,然后自己连接一个字符串出来,请问如何实现或者谁能变成输出下面的记录也行编号 内容 备选项 23 我漂亮吗 A漂亮<br>B不漂亮
下面士那个自定义函数CREATE FUNCTION JoinGroup
(@id INT)
RETURNS VARCHAR(1000)
AS
BEGIN
DECLARE @s VARCHAR(8000)
SELECT @s=ISNULL(@s,'') + '*' + TextB FROM B表 WHERE BID=@ID
SET @s=STUFF(@s,1,1,'')
RETURN @s
END
SELECT AID,TextA,dbo.JoinGroup(AID) FROM A表
下面士那个自定义函数CREATE FUNCTION JoinGroup
(@id INT)
RETURNS VARCHAR(1000)
AS
BEGIN
DECLARE @s VARCHAR(8000)
SELECT @s=ISNULL(@s,'') + '*' + TextB FROM B表 WHERE BID=@ID
SET @s=STUFF(@s,1,1,'')
RETURN @s
END
SELECT AID,TextA,dbo.JoinGroup(AID) FROM A表
将SELECT @s=ISNULL(@s,'') + '*' + TextB FROM B表 WHERE BID=@ID
这里的 * 换成 <BR> 即可。你真有分啊, 到处开散分贴
難道樓主還有特殊要求沒有說明??
SELECT @s=ISNULL(@s,'') + '<BR>' + TextB FROM B表 WHERE BID=@ID
(@id INT,
@j VARCHAR(100) --连接串
)
RETURNS VARCHAR(1000)
AS
BEGIN
DECLARE @s VARCHAR(8000)
DECLARE @i INT
SET @i=0
SELECT @s=ISNULL(@s,'') + @j +CHAR(i+65)+ TextB,@i=@i+1 FROM B表 WHERE BID=@ID
SET @s=STUFF(@s,1,LEN(@j),'')
RETURN @s
ENDSELECT AID,TextA,dbo.JoinGroup(AID,'<BR>') FROM A表没测试,可能有手误。 另外, 当你 AID在B表中的数量过多时(超过26个)就不符合要求了
因为英文字符只有26个。
多过26时,你要给条件再怎么加序号。
------------------
fastson() ( ) 信誉:99 2006-07-22 15:12:00 得分: 0
不一样啊,那个A,B,C是按照记录顺序生成的,记录中没有
-------------------我已经猜到你意思了,呵,果然没猜错。
23 我漂亮吗? NULL
[AID] [int] NULL ,
[TextA] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GOCREATE TABLE [dbo].[B] (
[BID] [int] NULL ,
[AID] [int] NULL ,
[TextB] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
FROM B表 WHERE BID=@ID应该是AID=@ID
CHAR(i+65)
改为 CHAR(@i+65)不需要。
可以用CASE WHEN解决SELECT @s=ISNULL(@s,'') + @j + (CASE WHEN @i>26 THEN ' ' ELSE CHAR(@i+65) END )+ TextB,@i=@i+1 FROM B表 WHERE ..
(@id INT,
@j VARCHAR(100) --连接串
)
RETURNS VARCHAR(1000)
AS
BEGIN
DECLARE @s VARCHAR(8000)
Select @s=''
DECLARE @i INT
SET @i=0
SELECT TOP 26 @s=@s+ @j +CHAR(@i+65)+ TextB,@i=@i+1 FROM B WHERE AID=@ID
SET @s=STUFF(@s,1,LEN(@j),'')
RETURN @s
END
GO
SELECT AID,TextA,dbo.JoinGroup(AID,'<BR>') FROM A
(AID INT, TextA VARCHAR(100))
INSERT A表 SELECT 23,'我漂亮吗'CREATE TABLE B表
(ID INT IDENTITY(1,1),BID INT,TextB VARCHAR(100))
INSERT B表(BID,TextB)
SELECT 23,'漂亮'
UNION SELECT 23,'不漂亮'
--测试函数体
DECLARE @j VARCHAR(100)
SET @j='<BR>'
DECLARE @id INT
SET @id=23
DECLARE @s VARCHAR(8000)
DECLARE @i INT
SET @i=0
SET @s=''
SELECT @s=ISNULL(@s,'') + @j +(CASE WHEN @i>26 THEN ' ' ELSE CHAR(@i+65) END )+ TextB,@i=@i+1 FROM B表 WHERE BID=@id
SET @s=STUFF(@s,1,LEN(@j),'')
SELECT @s
DROP TABLE A表
DROP TABLE B表/*结果
A不漂亮<BR>B漂亮
*/