0

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

任何人都请帮助获得所需的输出。

4

2 回答 2

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 演示

于 2013-10-08T07:10:29.150 回答
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
于 2013-10-08T07:23:45.480 回答