拆分字符串,与另一个字符串连接并对其进行排序

时间:2013-10-08 06:53:30

标签: sql sql-server stored-procedures split

我在表1中有两列Col1和Col2。如果2行Col1的值为“C,B”和& “A,B”和2行Col2的值为“ASC”& “DES”,我需要输出两行,顺序为“ADES,B”和& “CASC,B”(即;应根据第一个值进行分类)。

Col1值应该基于逗号分隔,它应该与Col2值组合,输出应该按照第一个值排序。

我有一个字符串拆分功能如下:

ALTER FUNCTION [dbo].[SplitString](@String nvarchar(4000), @Delimiter char(1))       
returns @temptable TABLE (items nvarchar(4000))       
as       
begin       
declare @idx int       
declare @slice nvarchar(4000)       

select @idx = 1       
    if len(@String)<1 or @String is null  return       

while @idx!= 0       
begin       
    set @idx = charindex(@Delimiter,@String)       
    if @idx!=0       
        set @slice = left(@String,@idx - 1)       
    else       
        set @slice = @String       

    if(len(@slice)>0)  
        insert into @temptable(Items) values(@slice)       

    set @String = right(@String,len(@String) - @idx)       
    if len(@String) = 0 break       
end   
return       
end  

输入列示例值:

 Col1  Col2

  C,B  ASC

  A,B  DES

渴望的Ouptut:

Output

ADES,B

CASC,B

任何人请帮忙以获得所需的输出。

2 个答案:

答案 0 :(得分:1)

SELECT *
   , LEFT(Co1,CHARINDEX(',',Co1)-1) 
      + Col2 
      + SUBSTRING(Co1,CHARINDEX(',',Co1),256) AS Result 
FROM Table1
ORDER BY Result

将256替换为列的长度或任何更大的值

修改

更好的是,使用STUFF函数:

SELECT *, STUFF(Co1,CHARINDEX(',',Co1),0,Col2) AS Result 
FROM Table1
ORDER BY Result

<强> SQLFiddle DEMO

答案 1 :(得分:0)

    CREATE TABLE Table1
        ([Col1] varchar(3), [Col2] varchar(3))
    ;

    INSERT INTO Table1
        ([Col1], [Col2])
    VALUES
        ('C,B', 'ASC'),
        ('A,B', 'DES')
    ;

**Query 1**:

    SELECT
          left(Col1,1) + col2 AS colA
        , right(col1,1)       AS colb
    FROM table1
    ORDER BY
          colA
        , colB




**[Results][2]**:

    | COLA | COLB |
    |------|------|
    | ADES |    B |
    | CASC |    B |



  [1]: http://sqlfiddle.com/#!3/e9dbd/2