2014-03-03 71 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 Server 2008和2012中? 我發現這個(http://explainextended.com/2011/02/18/things-sql-needs-series/)可能能夠解決它。

在此先感謝

+5

你在哪裏得到的這一類?它是如何計算的? – jean

+0

需要了解Category(ID,Type)函數應該如何定義。如果您的輸入和輸出是您正在處理的整個數據範圍,請參閱下面的答案。 – ErstwhileIII

+0

好吧,現在我們得到了某種類別的函數,但是你假設行被id asc排序,類型asc我認爲(不同的排序生病會得到不同的結果) – jean

回答

0

您可以嘗試(全部在SQL查詢映射SQL)

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

這是可能的,但有點不可思議,因爲對分類的值取決於以前的數據條目。 看看ROW_NUMBER()DENSE_RANK()函數,這些函數會爲你編寫部分編號。我可能會選擇一個派生表,按照你想要的方式排序,並用row_number()對它們進行排序,將它們加回到自身上,並將行與先前的行進行比較,以查看Type匹配項和Id = Id-1,然後基於此重新排名。

+0

是的,這很奇怪。如果您使用密集排序,因爲必須按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 
相關問題