2014-07-08 2 views
0

지금까지 다음을 반환하는 쿼리가 있습니다.레코드 SQL에서 첫 번째 문자열 선택

Stock Code BomReference  Description 
2134601A 5134601A   ***DISC*** 004601 EXP Pack I PC Spoo (NF) 500MLX6 
2134601A 5109052   40010934 IPC2101 UK PACK PC SHAMPOO (NF) 500MLX6 
2134601A 5134601B   40010908 004601 EXP PACK PC SHAMPOO 500MLX6 
2134601A 5109052L   40010909 IPC2101L UK PACK IPC SPOO 500ML X 6 

코드는 다음과 같습니다.

SELECT  BomComponents.StockCode, BomHeaders.BomReference, BomHeaders.Description 
FROM   BomComponents INNER JOIN 
         BomHeaders ON BomComponents.HeaderID = BomHeaders.ID 
WHERE StockCode = '2134601A' 

나는 다음에 결과에 설명 다음 그룹 BOM을 참조 함께 설명에서 단지 첫 번째 단어/숫자를 선택 할 수 있어야합니다.

StockCode  BomReference        Description 
2134601A  5134601A, 5109052, 5134601B, 5109052L  ***DISC***, 40010934, 40010908, 40010909 

도움이 될 것입니다.

+0

참조 http://stackoverflow.com/questions/273238/how-to-use-group-by-to-concatenate-strings-in-sql-server –

+0

설명의 첫 단어를 얻으려면 http : /stackoverflow.com/questions/707610/extract-the-first-word-of-a-string-in-a-sql-server-query –

답변

1

아래 기능을 생성하면이를 수행해야합니다. 나는 그것을 아주 자주 사용한다.

선택 dbo.getTokenValue ([귀하의 문자열], [는 문자 구분] [위치를])

이 경우

: dbo.getTokenValue (설명을 선택, '',)

/****** Object: UserDefinedFunction [dbo].[getTokenValue] Script Date: 7/8/2014 1:08:08 PM ******/ 
SET ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER ON 
GO 


/* 
Accepts the string, delimeter and the position of the required value and returns the value 
*/ 

create function [dbo].[getTokenValue] (@tokenvalue varchar(200), @Delimeter char, @pos int) 
returns varchar(200) 
Begin 
    Declare @DelimPos int 
    Declare @remSubstr varchar(200) 
    Declare @FinalStr varchar(200) 
    Declare @Count int 
    Declare @Countdelim int 

    set @Finalstr = '' 
    Set @Countdelim = 0 
    Set @remSubstr = @tokenValue 
    Set @Count = @pos-1 
    set @countdelim = 1 

    while @Count <> 0 
     Begin 
      Set @DelimPos = charindex(@Delimeter,@remSubstr) 
      If @DelimPos = 0 
       Break; 
       set @remSubstr = substring(@remSubstr,@DelimPos+1,Len(@remSubstr)[email protected]) 
       set @Count = @Count -1 
       set @CountDelim = @CountDelim + 1 
     End 

    If @Pos > @CountDelim 
     Begin  
      set @Finalstr = null 
      return @FinalStr 
     end 
    else 
     Begin 
      Set @DelimPos = charindex(@Delimeter,@remSubstr) 
      if @DelimPos = 0 
       Set @Finalstr = @remsubstr 
      else 
       Set @FinalStr = substring(@remSubstr,1,@DelimPos-1) 
     end 

    return @FinalStr 
end 

GO