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)
之间有一个结表RMA和tdefSymptomCode称为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)
这样可以吗?
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)