パーティション機能を使用して、SQL Serverのパーティションは、連続的なデジタルアクセスの問題を解決しません

データテーブルの列のSQL Serverは必ずしも連続番号ではなく、のようなセグメントデジタル表示への連続的な需要要件に:1,2,3,4,5,6,10,11,12,13、

このような表示が必要になります:1 6,10〜13に。ここでは方法です。

いくつかの単語の男は、直接インスタンス上で、と述べました。

-创建测试表
CREATE TABLE PartitionTest

ID INT IDENTITY(1,1)PRIMARY KEY、
KeyIDをINT、 -标识ID
民INT -号码

-插入数据、KeyIDを不同
INSERT INTO dbo.PartitionTest(KeyIDを、NUM) VALUES(1、8000)
INSERT INTO dbo.PartitionTest(KeyIDを、NUM)VALUES(1、8001)
INSERT INTO dbo.PartitionTest(KeyIDを、NUM)VALUES(1、8002)
INSERT INTO dbo.PartitionTest(KeyIDを、NUM)VALUES( 1、8003)
INSERT INTO dbo.PartitionTest(KeyIDを、NUM)VALUES(1、8004)
INSERT INTO dbo.PartitionTest(KeyIDを、NUM)VALUES(1、8005)
INSERT INTO dbo.PartitionTest(KeyIDを、NUM)VALUES(1、 8006)
INSERT INTO dbo.PartitionTest(KeyIDを、NUM)VALUES(1、8007)
INSERT INTO dbo.PartitionTest(KeyIDを、NUM)VALUES(2、9000)
INSERT INTO dbo.PartitionTest(KeyIDを、NUM)VALUES(2、9001)
dbo.PartitionTest(KeyIDを、NUM)VALUES(2、9002)。INSERT INTO
INSERT INTO dbo.PartitionTest(KeyIDを、NUM)VALUES(2、9003)
INSERT INTO dbo.PartitionTest(KeyIDを、NUM)VALUES(2、9004)
INSERT INTO dbo.PartitionTest(KeyIDを、NUM)VALUES(2、9005)
DBO。INSERT INTO。 PartitionTest(KeyIDを、NUM)VALUES(2、9006)
INSERT INTO dbo.PartitionTest(KeyIDを、NUM)VALUES(2、9007)

-鍵ID異なる状況下で、それはそのようなデータを見つけることは簡単です
。SELECT鍵ID、CONVERT(VARCHAR(10 )、MIN(NUM))+ '〜' + CONVERT(VARCHAR(10)、MAX(NUM)) dbo.PartitionTest鍵ID IN(FROM PARTNUM AS 1,2)GROUP BY鍵ID

 

 

-插入数据、KeyIDを相同
INSERT INTO dbo.PartitionTest(KeyIDを、NUM)VALUES(3、1000)
INSERT INTO dbo.PartitionTest(KeyIDを、NUM)VALUES(3 1001)
INSERT INTO dbo.PartitionTest(KeyIDを、NUM)VALUES (3 1002)
INSERT INTO dbo.PartitionTest(KeyIDを、NUM)VALUES(3 1003)
INSERT INTO dbo.PartitionTest(KeyIDを、NUM)VALUES(3 1004)
INSERT INTO dbo.PartitionTest(KeyIDを、NUM)VALUES(3 1005)
INSERT INTO dbo.PartitionTest(KeyIDを、NUM)VALUES(3 1006)
INSERT INTO dbo.PartitionTest(KeyIDを、NUM)VALUES(3 1007)
INSERT INTO dbo.PartitionTest(KeyIDを、NUM)VALUES(3、4000 )
INSERT INTO dbo.PartitionTest(KeyIDを、NUM)VALUES(3、4001)
INSERT INTO dbo.PartitionTest(KeyIDを、NUM)VALUES(3、4002)
INSERT INTO dbo.PartitionTest(KeyIDを、NUM)VALUES(3、4003)
INSERT INTO dbo.PartitionTest(KeyIDを、NUM)VALUES(3、4004)
dbo.PartitionTest(KeyIDを、NUM)VALUES(3、4005)。INSERT INTO
INSERT INTO dbo.PartitionTest(KeyIDを、NUM)VALUES(3、4006)
INSERT INTO dbo.PartitionTest(KeyIDを、NUM)VALUES(3、4007)
INSERT INTO dbo.PartitionTest(KeyIDを、NUM)VALUES(3、5007)

同じ--KeyIDケースの下では、上記のクエリは、所望のデータがのニーズを知ることができない
、鍵IDを選択するCONVERT(VARCHAR(10 )、MIN(NUM))+ '〜' + CONVERT(VARCHAR(10)、MAX( dbo.PartitionTest FROM PARTNUM AS NUM))鍵ID BY鍵ID IN(3)GROUP

 

 

- groupnumのグループ化を利用することができる連続パケット数の各周期でパーティションを使用して単離することができる
SELECT
KeyIDを、
民、
(KeyIDをNUM BY隔壁によってORDER)newNum、オーバーROW_NUMBER()
のNum-ROW_NUMBER()BY KeyIDをORDERパーティション(上をNUM BY)groupnumの
KeyIDをIN(3)dbo.PartitionTest FROM

 

 

-書き込み、あなたは要件が要求を達成することができます
SELECT t.KeyID、
CASE COUNT(newNum)> 1THEN CONVERT(VARCHAR(10)、MIN(t.Num))+ '〜' + CONVERT(VARCHAR(10)、 MAX(t.Num))ELSE CONVERT(VARCHAR(10)、MIN(t.Num))ENDのPARTNUM可能性
FROM(
SELECT
KeyIDを、
民、
民-ROW_NUMBER()オーバー(パーティションKeyIDをBY NUM BY ORDER)newNum
FROM dbo.PartitionTest WHERE IN KeyIDを(3)
)T t.KeyID GROUP BY、t.NewNum

 

 

 

 

 

上記のコードは、賞賛、それのポイントのように、ああテストするためにデータベースに直接それを実行することができます!

 

おすすめ

転載: www.cnblogs.com/nimayax/p/11586591.html