String.Join в SQL

я хочу выбрать из таблицы с именем RMA (упрощенно):

 idRMA| RMA_Number
 -----------------------
 1      RMA0006701
 2      RMA0006730
 3      RMA0006736
 4      RMA0006739
 5      RMA0006742

Существует таблица соединений между RMA и tdefSymptomCode , называемая trelRMA_SymptomCode]: [111336280] полнота, это 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

Q:

каждый RMA может иметь 0-5 SymptomCode. Как я могу объединить SymptomCodeNumber с разделителем вроде ':' вместе в скалярной функции, чтобы в результате я получил только одно значение varchar.

Что-то вроде этого (где getRmaSymptomCodes - SVF):

SELECT idRMA, RMA_Number, dbo.getRmaSymptomCodes(idRMA,':') AS Symptoms FROM RMA

Это могут быть симптомы 3 разных RMA (у всех есть ровно один симптом):

RMA_Number    SymptomCodeNumber
RMA0004823    0100
RMA0004823    0200
RMA0000083    0300
RMA0000084    0300
RMA0000084    0400

Это должно быть объединено как:

RMA0004823    0100:0200
RMA0000083    0300
RMA0000084    0300:0400

Заранее спасибо

Обновление : Спасибо всем, что я создал эта рабочая функция

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
5
задан Tim Schmelter 28 January 2011 в 19:42
поделиться