sql - 连接数字的存储过程

标签 sql sql-server stored-procedures

我有一个存储过程,可以将多个记录中的跟踪号码连接到一个记录中。

下面的这个存储过程工作正常

ALTER PROCEDURE [dbo].[Proc1]
   @HWOrderID NVARCHAR(20)
AS
   DECLARE @concatn NVARCHAR(MAX)

   SELECT 
      @concatn = COALESCE(@concatn + ' ','') +
                 COALESCE(IT.TrackingNum + ', ','')  
   FROM 
      HWEvent as hwe
   INNER JOIN 
      HWOrderID AS hwo ON hwo.HWEventpk = hwe.HWEventpk
   LEFT OUTER JOIN  
      InventoryTransaction IT ON hwo.HWEventpk = IT.HWEventpk
   WHERE
       hwo.HWOrderID = 21000
       AND IT.FromPartypk = '13EF4AF5-0957-465C-BE20-C057EC970B5B'

   SELECT 
      @concatn AS 'FromSMHS'

   SET @concatn = null

我的结果:

FromSMHS
5560,  5561,  5562,  5563,  5564,  5565

但是...现在我需要从第二个表添加额外的跟踪号码。当我加入其他表格时,我收到重复的跟踪号码。

ALTER PROCEDURE [dbo].[Proc2]
    @HWOrderID NVARCHAR(20)
AS
   DECLARE @concatn NVARCHAR(MAX)

   SELECT 
      @concatn = COALESCE(@concatn + ' ','') +
                 COALESCE(IT.TrackingNum + ', ','') +
                 COALESCE(fexd.TrackingNumber + ', ','')  
   FROM
      HWEvent as hwe
   INNER JOIN 
      HWOrderID AS hwo ON hwo.HWEventpk = hwe.HWEventpk
   LEFT OUTER JOIN  
      InventoryTransaction IT ON hwo.HWEventpk = IT.HWEventpk
   LEFT OUTER JOIN   
      FedexTrackingReference fexr ON hwe.HWEventID = fexr.HWEventID
   LEFT OUTER JOIN  
      FedExTrackingDetail fexd ON fexr.FedexTrackingDetailpk =  fexd.FedExTrackingDetailpk
   WHERE
      hwo.HWOrderID = 21000
      AND IT.FromPartypk = '13EF4AF5-0957-465C-BE20-C057EC970B5B'

   SELECT @concatn AS 'FromSMHS'
   SET @concatn = null

我的结果:

FromSMHS
5560, 5561  5560, 8500,5560, 8501,  5560, 8502,  5562, 5561  5562, 8500,5562, 8501,  5562, 8502,  5563, 5561  5563, 8500,5563, 8501,  5563, 8502,  5564, 5561  5564, 8503, 8501,  5564, 8502,  5564, 5561  5564, 8503, 8501,  5564, 8502,  5565, 5561  5565, 8500,5565, 8501,  5565, 8502

我想要的结果应该是这样的:

FromSMHS
5560, 5561, 5562, 5563, 5564,  5565, 8500, 8501, 8502,8503

最佳答案

试试这个......

ALTER PROCEDURE [dbo].[Proc2]
@HWOrderID NVARCHAR(20)
AS
BEGIN
    SET NOCOUNT ON;

SELECT DISTINCT
       STUFF((SELECT ', ' +  CAST(TrackingNum AS VARCHAR(100))
              FROM InventoryTransaction
              WHERE HWEventpk = IT.HWEventpk
              FOR XML PATH(''),TYPE)
              .value('.','NVARCHAR(MAX)'),1,2,'')

 + ' ' +STUFF((SELECT ', ' +  CAST(TrackingNumber AS VARCHAR(100))
              FROM FedExTrackingDetail
              WHERE fexr.FedexTrackingDetailpk = FedexTrackingDetailpk
              FOR XML PATH(''),TYPE)
              .value('.','NVARCHAR(MAX)'),1,2,'')  AS Result_List             

FROM  HWEvent as hwe
INNER JOIN  HWOrderID AS hwo            ON hwo.HWEventpk = hwe.HWEventpk  AND hwo.HWOrderID = @HWOrderID
LEFT  JOIN  InventoryTransaction IT     ON hwo.HWEventpk = IT.HWEventpk
                                       AND IT.FromPartypk = '13EF4AF5-0957-465C-BE20-C057EC970B5B'
LEFT  JOIN  FedexTrackingReference fexr ON hwe.HWEventID = fexr.HWEventID
LEFT  JOIN  FedExTrackingDetail fexd    ON fexr.FedexTrackingDetailpk =  fexd.FedExTrackingDetailpk

END

关于sql - 连接数字的存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25796012/

相关文章:

sql - MS SQL Server 中的字符串操作

sql - 如何在SQL函数中计算不同的趋势线类型

oracle - oracle存储过程中找不到数据错误

PHP 使用来自 SQL Server 2012 的 MSSQL_Query 调用存储过程返回无效值

sql-server - SQL 服务器 : Merge statement compilation error

SQL Server : how to get a database name as a parameter in a stored procedure

sql - 每天多次输入,转换为每日和每天的平均值

sql - Truncate SELECT table_name 语法错误

c# - 如何返回视频(flv)路径以在flowplayer中显示?

sql-server - SQL Server VARBINARY INSERT 锁定表 30 分钟以上