34,590
社区成员
发帖
与我相关
我的任务
分享
IF OBJECT_ID('tempdb..#TempA','U') IS NOT NULL DROP TABLE #TempA
CREATE TABLE #TempA(Id INT IDENTITY(1,1),Txt VARCHAR(100))
INSERT INTO #TempA(Txt)
VALUES( '839'),('355'),('360'),('360')
IF OBJECT_ID('tempdb..#TempB','U') IS NOT NULL DROP TABLE #TempB
CREATE TABLE #TempB
(
Rn INT IDENTITY(1,1)
,ID INT
,Num CHAR(1)
)
DECLARE @Cnt INT=(SELECT MAX(Id) FROM #TempA)
DECLARE @Txt VARCHAR(100)='',@Num CHAR(1)=''
WHILE @Cnt>0
BEGIN
SELECT @Txt=Txt FROM #TempA WHERE Id=@Cnt
WHILE LEN(@Txt)>0
BEGIN
INSERT INTO #TempB(ID,Num) VALUES(@Cnt,left(@Txt,1))
SET @Txt=STUFF(@Txt,1,1,'')
END
SET @Cnt=@Cnt-1
END
IF OBJECT_ID('tempdb..#TempC','U') IS NOT NULL DROP TABLE #TempC
SELECT ROW_NUMBER() OVER(PARTITION BY id ORDER BY ID,Num) AS ID1 ,ID,Num
INTO #TempC
FROM #TempB
SELECT DISTINCT A.ID
,REPLACE(T.Num,',','') AS EndTxt
FROM #TempC AS A
CROSS APPLY (
SELECT Num=STUFF((SELECT ','+B.Num FROM #TempC AS B WHERE A.ID=B.ID FOR XML PATH('')),1,1,'')
) AS T
GROUP BY A.ID,A.Num,t.Num
ORDER BY A.ID
CREATE FUNCTION f(@s VARCHAR (100))
RETURNS VARCHAR(100)
AS
BEGIN
DECLARE @t TABLE ( c VARCHAR(1),o INT)
DECLARE @r VARCHAR(100)
DECLARE @iLen INT
DECLARE @i INT
DECLARE @o INT
SET @r=''
SET @iLen=LEN(@s)
SET @i=1
SET @o=1
WHILE @i<=@iLen
BEGIN
IF SUBSTRING(@s,@i,1)=','
BEGIN
INSERT INTO @t VALUES('Z',@o)
SET @o=@o+1
END
ELSE
BEGIN
INSERT INTO @t VALUES(SUBSTRING(@s,@i,1),@o)
END
SET @i=@i+1
END
SELECT @r=@r+c FROM @t ORDER BY o,c
RETURN @r
END