SQL中的String.Join

Tim*_*ter 5 sql t-sql sql-server sql-server-2005 user-defined-functions

我想从一个叫做RMA(简化)的表中选择:

 idRMA| RMA_Number
 -----------------------
 1      RMA0006701
 2      RMA0006730
 3      RMA0006736
 4      RMA0006739
 5      RMA0006742
Run Code Online (Sandbox Code Playgroud)

之间有一个结表RMAtdefSymptomCode称为trelRMA_SymptomCode:

 fiSymptomCode| fiRMA
 -----------------------
 1              1
 1              2
 2              2
 5              3
 7              3
 8              3
 2              5
 3              5
 4              5
 5              5
Run Code Online (Sandbox Code Playgroud)

为了完整起见,这是tdefSymptomCode:

idSymptomCode    SymptomCodeNumber      SymptomCodeName
1                0000                   Audio problem
2                0100                   SIM problem
3                0200                   Appearance problem
4                0300                   Network problem
5                0500                   On/Off problem
Run Code Online (Sandbox Code Playgroud)

问:

每个RMA都可以有0-5个SymptomCodes.如何在标量值函数中将SymptomCodeNumber与':'等分隔符一起加入SymptomCodeNumber,这样我只得到一个varchar值作为结果.

像这样的东西(getRmaSymptomCodesSVF 在哪里):

SELECT idRMA, RMA_Number, dbo.getRmaSymptomCodes(idRMA,':') AS Symptoms FROM RMA
Run Code Online (Sandbox Code Playgroud)

这可能是3种不同RMA的症状(都只有一种症状):

RMA_Number    SymptomCodeNumber
RMA0004823    0100
RMA0004823    0200
RMA0000083    0300
RMA0000084    0300
RMA0000084    0400
Run Code Online (Sandbox Code Playgroud)

这应该连接为:

RMA0004823    0100:0200
RMA0000083    0300
RMA0000084    0300:0400
Run Code Online (Sandbox Code Playgroud)

先感谢您

更新:感谢我创造了这个工作功能

CREATE FUNCTION [dbo].[getRmaSymptomCodes]
(
    @idRMA int,
    @delimiter varchar(5)
)
RETURNS VARCHAR(8000)
AS
BEGIN
    DECLARE @Codes VARCHAR(8000) 
    SELECT @Codes = COALESCE(@Codes + @delimiter, '') +  tdefSymptomCode.SymptomCodeNumber
    FROM  RMA INNER JOIN
        trelRMA_SymptomCode ON RMA.IdRMA = trelRMA_SymptomCode.fiRMA INNER JOIN
        tdefSymptomCode ON trelRMA_SymptomCode.fiSymptomCode = tdefSymptomCode.idSymptomCode
    where idRMA=@idRMA
    order by SymptomCodeNumber
    return @Codes
END
Run Code Online (Sandbox Code Playgroud)

gri*_*mig 4

这样可以吗?

DECLARE @Codes VARCHAR(8000) 
SELECT @Codes = COALESCE(@Codes + ', ': '') +  tdefSymptomCode.SymptomCodeNumber
    FROM  RMA INNER JOIN
        trelRMA_SymptomCode ON RMA.IdRMA = trelRMA_SymptomCode.fiRMA INNER JOIN
        tdefSymptomCode ON trelRMA_SymptomCode.fiSymptomCode = tdefSymptomCode.idSymptomCode
    where idRMA=2
    order by SymptomCodeNumber
return @Codes
Run Code Online (Sandbox Code Playgroud)