2014-09-11 3 views
4

У меня есть хранимая процедура, которая объединяет номера отслеживания из нескольких записей в один.Сохраненная процедура, которая объединяет числа

Эта хранимая процедура ниже работает тонкие

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 
+1

Вы можете просто поместить значения во временную таблицу первого и сделать отличный – Donal

+1

Это не функция - это хранимая процедура .... –

ответ

1

Попробуйте это ....

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 
+0

Это сработало для меня. Спасибо. – YHerrera

1

Я бы союз результаты от 2 таблицы, а затем я лично, как с помощью FOR XML PATH трюк, чтобы получить строку с разделителями-запятыми из нескольких строк.

How to collate rows to a delimited string in SQL2008R2

Смежные вопросы