Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 拆分字符串,与另一个字符串连接并对其排序_Sql_Sql Server_Stored Procedures_Split - Fatal编程技术网

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

Sql 拆分字符串,与另一个字符串连接并对其排序,sql,sql-server,stored-procedures,split,Sql,Sql Server,Stored Procedures,Split,我在表1中有两列Col1和Col2。如果Col1的两行的值为“C,B”和“A,B”,Col2的两行的值为“ASC”和“DES”,我需要按“ADES,B”和“CASC,B”的顺序将输出分为两行(即,应根据第一个值进行排序) Col1值应基于逗号分隔,并应与Col2值组合,输出应基于第一个值按顺序排序 我有一个字符串拆分函数,如下所示: ALTER FUNCTION [dbo].[SplitString](@String nvarchar(4000), @Delimiter char(1))

我在表1中有两列Col1和Col2。如果Col1的两行的值为“C,B”和“A,B”,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
Output

ADES,B

CASC,B
任何人都可以帮忙得到想要的输出

SELECT *
   , LEFT(Co1,CHARINDEX(',',Co1)-1) 
      + Col2 
      + SUBSTRING(Co1,CHARINDEX(',',Co1),256) AS Result 
FROM Table1
ORDER BY Result
将256替换为列的长度或任何更大的值

编辑:

 Col1  Col2

  C,B  ASC

  A,B  DES
Output

ADES,B

CASC,B
更好的是,使用函数:

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