연속 디지털 액세스의 문제가 해결되지 않는 파티션 기능을 사용하여 SQL 서버 파티션

데이터 테이블의 열에서 SQL 서버는 반드시 연속 번호가 아니라 같은 세그먼트 디지털 디스플레이에 대한 지속적인 수요 요구 사항에 : 1,2,3,4,5,6,10,11,12,13,

이러한 표시가 필요합니다 : 1 ~ 13 6,10한다. 방법은 다음과 같습니다.

말 수가 적은 사람이 직접 인스턴스 말했다.

-创建测试表
CREATE TABLE PartitionTest
(
ID의 INT의 IDENTITY (1,1) PRIMARY KEY,
-a Keyid 키 ID INT -标识ID
민 INT -号码
)
-插入数据, -a Keyid 키 ID不同
INSERT INTO dbo.PartitionTest (-a Keyid 키 ID, 민) VALUES (1, 8000)
INSERT INTO dbo.PartitionTest (-a Keyid 키 ID, 민) VALUES (1, 8001)
dbo.PartitionTest (-a Keyid 키 ID, 민) VALUES (1, 8002) 삽입 반
(dbo.PartitionTest (-a Keyid 키 ID, 민) 값으로 INSERT 1, 8003)
INSERT INTO dbo.PartitionTest (-a Keyid 키 ID, 민) VALUES (1, 8004)
), dbo.PartitionTest (-a Keyid 키 ID, 민) VALUES ((1)에 8005를 삽입
1 (dbo.PartitionTest (-a Keyid 키 ID, 민) 값으로 INSERT 8006)
INSERT INTO dbo.PartitionTest (-a Keyid 키 ID, 민) VALUES (1, 8007)
INSERT INTO dbo.PartitionTest (-a Keyid 키 ID, 민) VALUES (2, 9000)
INSERT INTO dbo.PartitionTest (-a Keyid 키 ID, 민) VALUES (2, 9001)
dbo.PartitionTest (-a Keyid 키 ID, 민) VALUES (2, 9002) INSERT INTO
INSERT INTO dbo.PartitionTest (-a Keyid 키 ID, 민) VALUES (2, 9003)
VALUES (2, 9004) INSERT INTO dbo.PartitionTest (-a Keyid 키 ID, 민)
dbo.PartitionTest INSERT INTO (-a Keyid 키 ID, 민) VALUES (2, 9005)
DBO INSERT INTO. PartitionTest (-a Keyid 키 ID, 민) VALUES (2, 9006)
INSERT INTO dbo.PartitionTest (-a Keyid 키 ID, 민) VALUES (2, 9007)

- -a Keyid 키 ID 다른 상황에서, 이러한 데이터를 쉽게 찾을 수
-a Keyid 키 ID는, (VARCHAR (10 변환을 선택합니다 +), MIN (민)) '~'+ CONVERT (VARCHAR (10), MAX (민)) dbo.PartitionTest -a Keyid 키 ID IN (FROM PartNum AS 1,2) -a Keyid 키 ID GROUP BY

 

 

-插入数据, -a Keyid 키 ID相同
INSERT INTO dbo.PartitionTest (-a Keyid 키 ID, 민) VALUES (3, 1000)
INSERT INTO dbo.PartitionTest (-a Keyid 키 ID, 민) VALUES (3, 1001)
dbo.PartitionTest (-a Keyid 키 ID, 민) 값으로 INSERT (3, 1002)
INSERT INTO dbo.PartitionTest (-a Keyid 키 ID, 민) VALUES (3, 1003)
dbo.PartitionTest (-a Keyid 키 ID, 민) VALUES (3, 1004) 삽입 반
(dbo.PartitionTest (-a Keyid 키 ID, 민) 값으로 3을 삽입 1005)
INSERT INTO dbo.PartitionTest (-a Keyid 키 ID, 민) VALUES (3, 1006)
) dbo.PartitionTest (-a Keyid 키 ID, 민) VALUES (3 1007 INSERT INTO
dbo.PartitionTest (-a Keyid 키 ID, 민) VALUES (3, 4000 INSERT INTO )
INSERT INTO dbo.PartitionTest (-a Keyid 키 ID, 민) VALUES (3, 4001)
INSERT INTO dbo.PartitionTest (-a Keyid 키 ID, 민) VALUES (3, 4002)
INSERT INTO dbo.PartitionTest (-a Keyid 키 ID, 민) VALUES (3, 4003)
INSERT INTO dbo.PartitionTest (-a Keyid 키 ID, 민) VALUES (3, 4004)
dbo.PartitionTest (-a Keyid 키 ID, 민) VALUES (3, 4005) INSERT INTO
INSERT INTO dbo.PartitionTest (-a Keyid 키 ID, 민) VALUES (3, 4006)
INSERT INTO dbo.PartitionTest (-a Keyid 키 ID, 민) VALUES (3, 4007)
dbo.PartitionTest (-a Keyid 키 ID, 민) VALUES (3, 5007) INSERT INTO

같은 --KeyID 경우에서, 위의 쿼리는 원하는 데이터의 요구를 찾을 수 없습니다
-a Keyid 키 ID는, (VARCHAR (10 변환을 선택합니다 ), MIN (민)) + '~'+ CONVERT (VARCHAR (10), MAX를 ( dbo.PartitionTest FROM PartNum AS 민)) WHERE -a Keyid 키 ID BY -a Keyid 키 ID IN (3) GROUP

 

 

- GroupNum 그룹화 이용 될 수있는 연속 패킷 번호의 각 기간별로 파티션을 이용하여 분리 될 수
선택 (SELECT)
-a Keyid 키 ID,
인분,
합니다 (-a Keyid 키 ID NUM BY 파티션 BY ORDER) newNum 통해 ROW_NUMBER ()를
BY 통해 민 - 더 ROW_NUMBER ()합니다 (-a Keyid 키 ID 순서 파티션 NUM BY) GroupNum
dbo.PartitionTest의 FROM 곳 -a Keyid 키 ID IN (. 3)

 

 

- 쓰기, 당신이 달성 할 수있는 요구 사항이 요구
선택 (SELECT) t.KeyID,
이 사건을 언제 COUNT (newNum)>는 CONVERT (VARCHAR (10), MIN (t.Num가)) + 1THEN '~'+ 변환하지 (VARCHAR (10), MAX (t.Num))에 그렇지 않으면 CONVERT (VARCHAR (10), MIN (t.Num)) 최종 PartNum 수
FROM의 (
선택 (SELECT)
-a Keyid 키 ID,
인분,
인분 - 더 ROW_NUMBER () 이상 (파티션 -a Keyid 키 ID BY NUM ORDER BY에) newNum
FROM의 dbo.PartitionTest 를 Where에서 -a Keyid 키 ID. (3)
) T t.KeyID 그룹에서, t.NewNum

 

 

 

 

 

위의 코드는 칭찬 그것의 점처럼 아, 테스트 데이터베이스에 직접 실행할 수 있습니다! ! !

 

추천

출처www.cnblogs.com/nimayax/p/11586591.html