2016-08-12 1 views
2

Ich verwende STUFF-Funktion, um mehrere Zeilenwerte zu einer Spalte abzurufen.Entfernen Sie zusätzliches Delimeter aus den Datensätzen

 ALTER PROCEDURE [dbo].[PrintOutlettoOutletTransfer] 
    @TransferCode varchar(20), 
    @token nvarchar(50) 

    AS 
    BEGIN 

    DECLARE @Isprint AS int 
    DECLARE @user AS VARCHAR(50) 
    DECLARE @PcIp AS VARCHAR(50) 
    DECLARE @PcName AS VARCHAR(50) 
    DECLARE @AditUserName AS VARCHAR(100) 
    DECLARE @outlet AS VARCHAR(100) 
    DECLARE @ServerName AS VARCHAR(200) 

    SET @user = '' 


-- Retrive data from user login history from Tocken 
    SELECT 
    @user = UserLogInHistory.UserId, 
    @PcIp = LogInIp, 
    @outlet=OutletCode, 
    @ServerName = ServerId, 
    @AditUserName = Users.UserFullName 
    from UserLogInHistory 
    inner join Users on Users.UserId = UserLogInHistory.UserId 
    where UserTokenId = @token; 

    SELECT 
    ISNULL(InventoryTransferHeader.TransferCode,'') AS 'TransferId', 
    ISNULL(InventoryTransferHeader.TransferDate,'') AS 'TransferDate', 
    ISNULL(InventoryTransferLine.ItemCode,'') AS 'ItemCode', 
    ISNULL(InventoryTransferLine.ItemDescription,'') AS 'ItemDescription', 
    ISNULL(InventoryTransferLine.Qty,'') AS 'Qty', 

    STUFF((SELECT InventoryTransferSerials.SerialNo + '/' 
      FROM InventoryTransferSerials 
      WHERE InventoryTransferSerials.ItemCode = InventoryTransferLine.ItemCode 
      AND InventoryTransferSerials.TransferCode = InventoryTransferHeader.TransferCode 
      FOR XML PATH('')),1,1,'') AS 'SN', 

    ISNULL(InventoryStatus.Description,'') AS 'InventoryStatus', 
    ISNULL(InventoryTransferHeader.FromOutlet,'') AS 'outletFrom' , 
    ISNULL(F.OutletDesc,'') AS 'fromOutletsDesc', 
    ISNULL(InventoryTransferHeader.TOOutlet,'') AS 'outletTO' , 
    ISNULL(T.OutletDesc,'') AS 'toOutletsDesc' 


    FROM InventoryTransferHeader 
    INNER JOIN 
    Outlets F ON InventoryTransferHeader.FromOutlet = F.OutletCode 
    INNER JOIN 
    Outlets T ON InventoryTransferHeader.ToOutlet = T.OutletCode 
    LEFT OUTER JOIN 
    InventoryStatus on InventoryStatus.StatusCode = InventoryTransferHeader.InventoryStatus 
    LEFT OUTER JOIN 
    InventoryTransferLine ON InventoryTransferLine.TransferCode = InventoryTransferHeader.TransferCode 


    WHERE (InventoryTransferHeader.TransferCode = @TransferCode OR   @TransferCode = '') AND (InventoryStatus.StatusCode = 1 OR InventoryStatus.StatusCode = 2) 

    --- Insert Values to Audit table 
INSERT INTO PrintHistory 
([DocType],[Reference],[AuditOutlet],[AuditUser],[AuditDate],[AuditType],[AuditIp],[AuditPc],[AuditUserName]) 
values 
('OutletToOutletInventoryTransfer',@TransferCode,@outlet,@user,GETDATE(),'1',@PcIp,@ServerName,@AditUserName); 


     UPDATE InventoryTransferHeader 
     SET InventoryTransferHeader.[Print] = 1, 
      InventoryTransferHeader.[PrintUser] = @user, 
      InventoryTransferHeader.[PrintDate] = GETDATE() 
     WHERE InventoryTransferHeader.TransferCode = @TransferCode AND InventoryTransferHeader.[Print] = 0; 


    END 

Es gibt eine Ausgabe wie folgt.

0000227/10000228/10000229/10000230/10000231/

Ich mag die zusätzlichen "/" von Aufzeichnungen entfernen.

Bitte helfen.

+0

Was genau sind die zusätzlichen Vorwärtsschrägstriche? –

+0

"/" am Ende. –

Antwort

1

Eine Möglichkeit ein einzelnes zu entfernen Schrägstrich Hinter am Ende Ihrer aktuellen SELECT in einer Unterabfrage wickeln und verwenden LEFT:

SELECT LEFT(t.SN, LEN(t.SN) - 1) 
FROM 
(
    SELECT STUFF((SELECT InventoryTransferSerials.SerialNo + ' /' 
        FROM InventoryTransferSerials 
        WHERE InventoryTransferSerials.ItemCode = 
         InventoryTransferLine.ItemCode AND 
         InventoryTransferSerials.TransferCode = 
         InventoryTransferHeader.TransferCode 
        FOR XML PATH('')), 1, 1, '') AS SN 
    FROM yourTable 
) t 
+0

Ich habe meine Frage noch einmal bearbeitet. Wie setze ich diese Lösung entsprechend um? –

+0

@DarshaniKaushalya Ohne Ihre Bearbeitung zu lesen, würde ich sagen, dass ich nur die Ausgabespalte unterteilen und alle Zeichen außer der letzten nehmen wollte. Daher würde sich die Logik meiner Antwort auf dieser Grundlage nicht ändern. –

+0

Danke für die tolle Hilfe. :) –

Verwandte Themen