2014-01-31 1 views
0

tblCustomer 테이블에 대해 Customercode 사용자 지정 정렬을 수행하려고합니다. SQL Server 2005에서 사용자 지정 정렬을 수행하는 방법

CustomerCode

는 같은 성 및 우편 번호 고객을 찾을 경우 증가합니다 여기 (3 char of Surname) + 1 + (PostCode)

, 1로 구성되어 있습니다.

예 : ABB12615, ABB22615

그래서 주로 나는이 방식으로하려고 노력

First 3 Letters of Surname + Index + PostCode. 

하여이를 정렬 할 :

ORDER BY CHARINDEX(SUBSTRING(customerCode, 1, 3), customerCode) 

하지만 이렇게 나에게 출력을 제공 :

ABB12615 
ABB12715 
... 
... 
... 
.. 
. 
ABB22615 

하지만 출력 순서는 다음과 같습니다.

ABB12615 

ABB22615 

ABB12715 

에 그것을 할 수 있습니까?

+0

예 가능, 당신은 새로운 것을 시도했다. – user2989408

답변

3

당신이 정말

ORDER BY SUBSTRING(customerCode, 1, 3), 
     SUBSTRING(customerCode, 5, 4), 
     SUBSTRING(customerCode, 4, 1) 
+0

매우 똑똑한 아이디어. 감사합니다 –

+0

하지만 마지막으로 우편 번호를 찾은 (02816) 내 도시 또는 5 자리했다. 내 솔루션은 len()을 사용하여 문자열의 나머지 부분을 가져옵니다. 데이터로 테스트되었습니다. –

0

SELECT * 
FROM TABLE1 
ORDER BY CASE WHEN COlumn1 = 'ABB12615' THEN 1 
       WHEN COlumn1 = 'ABB22615' THEN 2 
       WHEN COlumn1 = 'ABB12715' THEN 3 
       END 
+0

죄송합니다. 제가 방금 예제를 제시했기 때문에 가능하지 않지만, 수천 명의 고객이 있습니다. –

+0

@HakooDesai 그래서 마지막으로 숫자를 기준으로 정렬하려고합니까? –

+0

아니요 (처음 3 자릿수) + 색인 (예 : 1,2,3,4,5,6..etc) + 우편 번호를 기반으로 정렬하려고합니다. 내 게시물을 봐주십시오. –

0

이 코드는 사용자가 원하는 방식으로 분류한다보십시오.

-- play table 
create table #postal 
(
    id int identity(1,1) primary key, 
    code varchar(16) 
) 
go 

-- remove data 
truncate table #postal; 
go 

-- add data 
insert into #postal 
values 
('ABB12615'), 
('ABB22615'), 
('ABB12715'), 
('AAA29615'), 
('AAA19615'); 
go 

-- sort 
select 
    * 
from 
    #postal 
order by 
    substring(code, 1, 3), 
    substring(code, 5, len(code) - 5), 
    substring(code, 4, 1) 

테스트 실행 결과.

enter image description here

+0

다음 순서로 o/p ID가 필요합니다. 5,4,1,2 다음에 3 –

+0

첫 번째 이미지를 넣었을 가능성이 큽니다. 나중에 업데이트됩니다. –

0

예는 수있을 것이다

Surname, postcode, index 

에 정렬 할 예상되는 결과를 기준으로합니다. CustomerCode 형식이 동일하다고 가정하면 아래 코드를 사용할 수 있습니다. 당신은 인덱스를 정렬하기 전에 문자열 함수 &에 따라 Customercode을 분할해야, 아래 그림과 같이 정수로 변환해야합니다

select * from tblCustomer 
ORDER BY 
SUBSTRING(Customercode , 1, 3) --SurName 
,CONVERT(INT, SUBSTRING(Customercode , 4, 1)) --Index 
,CONVERT(INT,SUBSTRING(Customercode , 5, 5)) --Post Code; You can optionally remove the convert to int function if your post code will contain characters 
관련 문제