2013-10-08 2 views
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 

원하는 Ouptut :

Output 

ADES,B 

CASC,B 

누구를 도와주세요 다음과 같이

나는 문자열 분할 기능을 구비하고있다원하는 출력을 얻을 수 있습니다.

답변

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

당신의 열의 길이 또는 더 큰 값으로 256을 대체

편집 :

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

SQLFiddle DEMO

:

더 좋은 STUFF 기능을 사용하여

+0

굉장! 감사!!! –

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 
관련 문제