2014-07-08 39 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 
相关问题