String.Join in SQL

前端 未结 4 605
独厮守ぢ
独厮守ぢ 2021-01-18 19:17

i want to select from a Table called RMA(simplified):

 idRMA| RMA_Number
 -----------------------
 1      RMA0006701
 2      RMA0006730
 3               


        
相关标签:
4条回答
  • 2021-01-18 19:57
    select rma_number,
       stuff((select ':' + c.symptomcodenumber
        from trelRMA_SymptomCode r
        inner join tdefsymptomcode c on c.idsymptomcode = r.fisymptomcode
        where r.fiRMA = rma.idRMA
        order by c.symptomcodenumber
        for xml path('')), 1, 1, '') SymptomCodeName
    from rma
    
    0 讨论(0)
  • 2021-01-18 19:59

    Would this do?

    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
    
    0 讨论(0)
  • 2021-01-18 20:04

    Use the classic XML PATH-trick for this:

    declare @RMA  as table(idRMA int, RMA_Number nvarchar(20))
    
    declare @trelRMA_SymptomCode as table (fiSymptomCode int, fiRMA int)
    
    declare @tdefSymptomCode as table (idSymptomCode int, SymptomCodeNumber nvarchar(4), SymptomCodeName nvarchar(20))
    
    insert into @RMA values
    (1,      'RMA0006701'),
    (2,      'RMA0006730'),
    (3,      'RMA0006736'),
    (4,      'RMA0006739'),
    (5,      'RMA0006742')
    
    insert into @trelRMA_SymptomCode values
    (1,              1),
    (1,              2),
    (2,              2),
    (5,              3),
    (7,              3),
    (8,              3),
    (2,              5),
    (3,              5),
    (4,              5),
    (5,              5)
    
    insert into @tdefSymptomCode values
    (1,                '0000',                   'Audio problem'),
    (2,                '0100',                   'SIM problem'),
    (3,                '0200',                   'Appearance problem'),
    (4,                '0300',                   'Network problem'),
    (5,                '0500',                   'On/Off problem')
    
    select RMA_Number,
     STUFF(
        (
        SELECT
          ':' + SymptomCodeNumber
        FROM @tdefSymptomCode def 
        join @trelRMA_SymptomCode rel on def.idSymptomCode = rel.fiSymptomCode
        where rel.fiRMA=rma.idRMA
        FOR XML PATH('')
        ), 1, 1, '')
    from @rma rma
    

    results in

    RMA0006701  0000
    RMA0006730  0000:0100
    RMA0006736  0500
    RMA0006739  NULL
    RMA0006742  0100:0200:0300:0500
    
    0 讨论(0)
  • 2021-01-18 20:09

    Here is something that should get you going:

    ALTER FUNCTION [dbo].[GetUCColumns]
    (@tableid INT, @index INT)
    RETURNS VARCHAR (MAX)
    AS
    BEGIN
    
        DECLARE @cols varchar(max)
    
        SELECT @cols = COALESCE(@cols + ', ', '') + [name]
        FROM [sys].[columns]
        where object_id = @tableid AND column_id IN 
        (SELECT [column_id]
          FROM [sys].[index_columns]
          where object_id = @tableid AND @index = index_id)
    
        RETURN @cols
        END
    
    0 讨论(0)
提交回复
热议问题