2014-10-24 4 views
0
내가 진보 된 종류와 같은 종류의 일을하려고하고

... 내 필드는정렬 혼합 숫자와 문자는

315122-111-7.5 
315122-111-8 
315122-001-7.5 
315122-111-8.5 
315122-001-8 
315122-001-9 
3151-BLK-7 
3151-BLK-7.5 
3151-BLK-9 

같은 내가 너무

처럼를 정렬 할 수있는 방법을 찾기 위해 노력하고 있습니다 기본적으로
315122-001-7.5 
315122-001-8 
315122-001-9 
315122-111-7.5 
315122-111-8 
315122-111-8.5 
3151-BLK-7 
3151-BLK-7.5 
3151-BLK-9 

내가 읽을 수와 문자를 기준으로 정렬 할 것 ...

이러한 목록을 정렬하는 방법에 대한 아이디어?

+0

필자는보기를 만들거나 필드를 계산하여 계산 된 열을 조합하여 열의 조합으로 정렬하는 방법을 설명했습니다. 당신의 예에서, 나는 당신이 일종의 갈길을 어떻게 예상하고 있는지를 exacly 말할 수 없습니다. – hometoast

+0

필드가 어떤 종류의 컨벤션을 따르지 않아서 작동하는지 모르겠습니다. – Ishey4

+0

컨벤션을 따르지 않는 필드 나 컬렉션이 나에게 기계로 분류 될 수없는 것처럼 들립니다. – hometoast

답변

0

닷넷에 custom comparer을 구현하는 것이 좋습니다. 다음 아마도 일부 정규식을 사용하여 다른 하이픈으로 구분 된 필드를 결정합니다. Regex를 사용하고 있다고하더라도 성능이 좋을 지 말하기는 어렵습니다.

SQL Server에서 이처럼 복잡한 작업을 수행하는 방법에 대한 단서가 없습니다.

+0

참으로 나는 그런 식으로 일하고 있습니다.하지만 당신이 말한 것처럼 ... 다소 복잡합니다 – Ishey4

+0

문제는 항상 때로는 분리되어 있지 않습니다. 315122-111-11.5E 315122-111-11.5EE 또는 315122- 111-11.5D .. 내가 규칙을 정하지 않았다고 말한 것처럼 ... – Ishey4

0

정렬 기준으로 사용할 필드가 합쳐진 새 필드를 만들려고합니다. 그런 다음 융합 된 필드를 정렬하여 원하는 것을 제공합니다.

실제로 소스 테이블에 필드를 작성하지 않아도됩니다. 보기를 만들고 필드를 선택하고 탐색/정렬 열 이름 아래에 함께 추가하여보기에서 새 "정렬"열을 만들도록 할 수 있습니다.

고유 한 탐색 열을 만들기 위해 코드와 매우 유사한 작업을 수행합니다. 간단한 100를 사용하여이 독특한 정렬 열을 생성하는 방법

예 선택 : 당신이 필요로

SELECT TOP 100 
[ Column1ToBeSorted ], 
[ Column2ToBeSorted ], 
[ Column3 ], 
[ Column4 ], 
[ Column5 ], 
([ Column1ToBeSorted ] + '-' + [ Column2ToBeSorted]) AS "NavigationKey" 
FROM [dbo].[ SourceTable ] 
ORDER BY [NavigationKey] ASC 

당신은 많은 열을 추가 할 수 있습니다. 당신은 단지 일관성이 있어야합니다.

varchar 및 nvarchar와 같은 간단한 문자 필드는이 방식으로 사용하기 쉽습니다.

숫자 필드 정렬은 약간 까다 롭습니다. 해당 열을 "1, 11, 12, 2, 21, 22"가 아닌 "1, 2, 3, 4, 11, 12, 21, 22, 23, 32, 33, 41, , 23, 3, 32, 33, 4, 41, 42 "이면 패딩과 하위 문자열 트릭을해야합니다. 단지 문장을 좀 더 복잡하게 만들지 만 불가능한 것은 아닙니다. 숫자 열을 산술적으로 정렬할지 신경 쓰지 않는다면, 정렬 된 (즉, 문자열 정렬) 다음에 간단한 문자열로 남겨 둘 수 있습니다.

날짜 정렬 (datetime, smalldatetime 등)을 사용하려면 날짜를 문자열로 변환하고 필요에 맞는 변환 유형을 지정해야합니다.

고정 소수점 숫자 (부동 소수점)는 사용자가 필요로하는 최대 너비로 포맷/캐스트해야 할 것입니다.

정렬 된 "NavigationKey"열이 생성되어 쿼리 속도가 느려질 수 있습니다. 행 추가, 삭제 또는 정렬 참여 변경을 위해 선택된 열이있을 때마다 서버가이를 다시 빌드해야한다는 것을 기억하십시오. 이것이 뷰를 만드는 것이 좋습니다. 필요하지 않으면 정렬 된 탐색 열을 작성하지 않아도됩니다.

내가 말했듯이 클라이언트 측의 C# 코드에서이 모든 작업을 수행하지만 select 문을 create view 문으로 변환하는 데 도움이 필요하면 create view의 예를 다룰 수 있습니다.

관련 문제