--创建一个合并的函数
create function f_merge(@name varchar(100))
returns varchar(8000)
as
begin
declare @str varchar(8000)
set @str = ' '
select @str = @str + ', ' + cast(tel as varchar(100)) from 表名 where name = @name
set @str = stuff(@str , 1,1, ' ')
return(@str)
End
go
------解决方案--------------------------------------------------------
还是用刚回答另一个问题时用的临时表:
CREATE TABLE TEMP.DG(
ID INTEGER,
NANME VARCHAR(1),
PARENT_ID INTEGER
);
INSERT INTO TEMP.DG VALUES
(1, 'A ',0),
(2, 'B ',1),
(3, 'C ',2),
(4, 'D ',1),
(5, 'E ',4);
你的需求是最终生成STR=A,B,C,D,E
下面算法实现表中字符连接
WITH TMP (NANME,ROWNUM) AS (
SELECT NANME,RANK() OVER(ORDER BY ID) FROM TEMP.DG --WHERE PARENT_ID=1
) ,
TMP2(STR,ROWNUM)AS
(SELECT CAST(NANME AS VARCHAR(100)) ,ROWNUM FROM TMP WHERE ROWNUM=1
UNION ALL
SELECT STR|| ', '||A.NANME , A.ROWNUM FROM TMP A ,TMP2 B WHERE A.ROWNUM=B.ROWNUM+1)
SELECT * FROM TMP2 WHERE ROWNUM=(SELECT MAX(ROWNUM) FROM TMP);
输出:
STR
'A,B,C,D,E ' 5
--------------------------
传参方式
WITH TMP (NANME,ROWNUM) AS (
SELECT NANME,RANK() OVER(ORDER BY ID) FROM TEMP.DG WHERE PARENT_ID=1
) ,
TMP2(STR,ROWNUM)AS
(SELECT CAST(NANME AS VARCHAR(100)) ,ROWNUM FROM TMP WHERE ROWNUM=1
UNION ALL
SELECT STR|| ', '||A.NANME , A.ROWNUM FROM TMP A ,TMP2 B WHERE A.ROWNUM=B.ROWNUM+1)
SELECT * FROM TMP2 WHERE ROWNUM=(SELECT MAX(ROWNUM) FROM TMP);
输出:
STR:
'B,D ' 2
其中TEMP.DG 就是你的表名,把上面算法加到你的函数中就OK了,函数怎么写不用我教吧,自己体会体会!
------解决方案--------------------------------------------------------
如果你有mssql wrapper的话就不用这么麻烦了。
只需在db2本地声明一个函数模板,然后做一个function mapping就可以了。
------解决方案--------------------------------------------------------
不过那种方法只能用来处理sql server的数据。