2014-03-03 4 views
0

테이블에 두 개의 열이 있습니다. ID는 PK이고 다른 열은 Type입니다. 예제 데이터는 다음과 같습니다.조건에 따라 그룹 데이터를 순차적으로 순위 지정

| ID | Type | 
| 1 | 0 | 
| 2 | 0 | 
| 3 | 1 | 
| 4 | 1 | 
| 5 | 0 | 
| 6 | 1 | 

다음과 같은 출력으로 샘플 데이터를 그룹화하려고했습니다. 1. 원하는 출력은 ID로 정렬됩니다. 2. 카테고리는 다음과 같은 논리를 기반으로 계산, 동일한 유형의 연속 기록은 같은 범주에 할당되며, 그것을 할 수있는 다른 유형의 기록은 1

| ID | Type |Category | 
| 1 | 0 | 1 | 
| 2 | 0 | 1 | 
| 3 | 1 | 2 | 
| 4 | 1 | 2 | 
| 5 | 0 | 3 | 
| 6 | 1 | 4 | 

에 의해 범주를 증가 SQL 서버 2008 및 2012에서? 이 (http://explainextended.com/2011/02/18/things-sql-needs-series/)이 문제를 해결할 수 있습니다.

+5

이 찾고 있습니다? 계산 방법은? – jean

+0

카테고리 (ID, 유형) 기능을 정의하는 방법을 이해해야합니다. 입력 및 출력이 처리중인 데이터의 전체 유니버스 인 경우 아래 답변을 참조하십시오. – ErstwhileIII

+0

이제는 일종의 범주 함수를 얻었지만 ID 오름차순으로 정렬 할 행을 가정하고 오름차순을 입력하십시오. (다른 순서는 카테고리에 따라 다른 결과를 얻습니다) – jean

답변

0

당신은 시도 할 수 있습니다 사전에

감사

select PK, ID, Category 
    from (select PK, ID, "1" as 'Category' from Table1 where ID = 0 and PK < 3; 
     UNION 
     select PK, ID, "2" as 'Category' from Table1 where ID = 1 and PK < 5 
     UNION 
     select PK, ID, "3" as 'Category' from Table1 where PK = 5 
     UNION 
     select PK, ID, "4" as 'Category' from Table1 where PK = 6 
     } 
    order by PK 
+0

데이터 유형이 많을 수 있습니다. 나는 더 나은 해결책을 원한다. – user3884

+0

id> 1 및 pk <5 인 경우 행을 반환하지 않습니다. – jean

0

그것은 가능하지만 (모든 SQL 쿼리에 매핑 SQL에서) 카테고리의 값이 이전의 데이터 항목에 의존하기 때문에 조금 이상한 . ROW_NUMBER()DENSE_RANK() 함수를 참조하십시오.이 함수는 번호 매기기의 일부입니다. 아마 당신이 원하는 방법을 주문한 파생 테이블을 선택하고 row_number()을 사용하여 시퀀스를 만들고, 다시 그 자체에 조인하고, 이전 행과 비교하여 Type이 일치하고 Id = Id-1인지 확인한 다음이를 기반으로 다시 순위를 매기십시오.

+0

예, 이상합니다. dense-rank를 사용하면 ID로 주문해야하기 때문에 범주 값이 늘어나는 순서가 아닙니다. – user3884

0

당신은 당신이에서 해당 범주를 받고

DECLARE @amount TABLE (ID INT,TYPE INT) 

INSERT INTo @amount (ID,TYPE)VALUES (1,0) 
INSERT INTo @amount (ID,TYPE)VALUES (2,0) 
INSERT INTo @amount (ID,TYPE)VALUES (3,1) 
INSERT INTo @amount (ID,TYPE)VALUES (4,1) 
INSERT INTo @amount (ID,TYPE)VALUES (5,0) 
INSERT INTo @amount (ID,TYPE)VALUES (6,1) 
INSERT INTo @amount (ID,TYPE)VALUES (7,0) 

select ID,TYPE,DENSE_RANK()OVER (PARTITION BY TYPE ORDER BY ID ASC) AS RN from @amount 
관련 문제