sql - SQL 中的 String.Join

标签 sql sql-server sql-server-2005 tsql user-defined-functions

我想从名为 RMA(简化)的表中进行选择:

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

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

为了完整起见,这是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

问:

每个 RMA 可以有 0-5 个症状代码。如何将 SymptomCodeNumber 与标量值函数中的分隔符(如“:”)连接在一起,以便我只得到一个 varchar 值作为结果。

类似这样的东西(其中getRmaSymptomCodes是一个SVF):

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

这可能是 3 种不同 RMA 的症状(所有 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

最佳答案

这样可以吗?

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

关于sql - SQL 中的 String.Join,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4815260/

相关文章:

sql - 迭代器的MySQL实现

sql - 使用动态变量名创建 SQL 表

sql - 即使我排除了零情况,SQL 中除以零错误?

SQL 将日期转换为工作日名称

sql-server - 将 .bak mssql 2005 恢复到新的 mssql 2008r2 服务器

sql - 如何检查两个有序SQL查询的结果是否匹配?

sql - 如何检查输入的日期是 mm/dd/yyyy 而不是 dd/mm/yyyy?

sql-server - 使用用户通过 Entity Framework 提供的 XPath 查询 SQL Server xml 列

sql - 更新 1.2 亿条记录的最快方法

sql-server-2005 - 在 SQL Server 2005 中将字段类型从 nvarchar(255) 更改为 nvarchar(Max)