2016-08-12 2 views
2

STUFF 함수를 사용하여 여러 행 값을 열로 검색하고 있습니다.레코드에서 추가 delimeter 제거

 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 

다음과 같이 출력됩니다.

0,000,227/10,000,229분의 10,000,228/10,000,231분의 10,000,230/

나는 기록에서 "/"추가를 제거 할.

도와주세요.

+0

정확히 추가 슬래시 무엇입니까? –

+0

"/"끝에. –

답변

1

하나의 옵션은 제거하는 하나의 앞으로 끝이 하위 쿼리에서 현재 SELECT 포장 및 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

다시 내 질문을 편집했습니다. 어떻게하면이 솔루션을 적용 할 수 있습니까? –

+0

@DarshaniKaushalya 편집을 읽지 않고서는 출력 열을 부분 문자열로 바꾸고 마지막 문자를 제외한 모든 문자를 가져 오는 것입니다. 따라서 내 답변의 논리는 이에 기초하여 변하지 않을 것입니다. –

+0

큰 도움을 주셔서 감사합니다. :) –