2011-12-16 3 views
1

난에 자연 정렬이 필요 있도록처럼 나는 테이블 번호와 데이터 집합을 C# 및 SQL 서버 2005을 사용하고 있습니다 :자연 정렬 2,005

1 
10 
2 
I.1 
Table 1 
Table 2 
Table 10 
I.10 
I.2 

위 내 번호입니다, 그리고 나는 그것들을 알파벳순으로 (1, 2, ..., 10, 11), 그 다음 알파벳 (I.1, I.2, ..., 1.10, I.11 등)으로 정렬하기를 원한다. 표 1, 표 2, ..., 표 10, ...을 끝에 붙이십시오.

일부 펑키 SQL을 사용하는 방법이 있습니까?

(참고 : 나는 한 번에 전체 데이터 집합을로드 할 수 없기 때문에 나는 C#을 자연 정렬 기능을 사용할 수 없습니다.) 나는 인스턴스를 가지고 있지 않는 한

+1

[2005 마이크로 소프트 SQL 자연 (인간 알파 - 숫자) 종류 (의 중복 가능성 http://stackoverflow.com/questions/34509/natural-human-alpha-numeric -sort-in-microsoft-sql-2005) – JYelton

답변

-1
이 같은

뭔가 (테스트되지 않은 작동 할 수 노트북에 SQL 서버의 I)을 사용하고 있습니다 :

SELECT * 
    FROM [tbl] 
ORDER BY ISNUMERIC([col]) DESC, 
     CASE ISNUMERIC([col]) 
       WHEN 1 THEN CAST([col] AS INT) 
       ELSE [col] 
       END ASC; 

는 값이 너무 유효한 숫자,라고 생각하면 ISNUMERIC 기능 1를 반환

  • ISNUMERIC([col]) DESC는 뉴두고 정면의 mbers
  • CASE ... END 알파벳순으로 숫자 값과 숫자 값을 정렬합니다.

미세 조정이 필요할 수도 있지만 올바른 경로로 시작해야합니다.

+0

throws 오류 : varchar 값 'I.1'을 데이터 형식 int로 변환 할 때 변환하지 못했습니다. –

-1

이 시도 :

 
declare @a as table (name varchar(100)) 
insert into @a values ('1') 
insert into @a values ('10') 
insert into @a values ('2') 
insert into @a values ('I.1') 
insert into @a values ('Table 1') 
insert into @a values ('Table 2') 
insert into @a values ('Table 10') 
insert into @a values ('I.10') 
insert into @a values ('I.2') 

select name from 
(
select top 10 name 
from 
    ( select top 10 row_number() over (partition by numerics order by numerics desc) sono, numerics, name 
     from 
     (
      select isnumeric(name) numerics, name 
      from @a 
     )t 
    )s where numerics = 1 order by convert(decimal, name) 
) a 
union all 
select name from 
(
select top 10 name 
from 
    (
     select top 10 row_number() over (partition by numerics order by numerics desc) sono, numerics, name 
     from 
     (
      select isnumeric(name) numerics, name 
      from @a 
     )u 
    ) v where numerics = 0 order by name 
) b 

+0

출력이 쓰기가 아닙니다. 출력은 (1, 2, 10, I.1, I.2, I.10, 표 1, 표 2, 표 10) –