如果某些觸發器解決方案已經覆蓋了這一點,但我無法讓它們適用於我的方案,但事先道歉。如何根據唯一密鑰增加SQL中的值
我有超過50,000行的表,所有這些行都有一個ID
,其中有大約5000個不同的ID值。在表格等內可能有100行,instrumentID = 1
和50與instrumentID = 2
,但他們將有略有不同的列條目。所以,我可以寫一個
SELECT * from tbl WHERE instrumentID = 1
,並使其返回100行(我知道這是簡單的東西,但僅僅是明確的)
我需要做的就是形成每一次儀器的遞增值ID被發現,所以我試過這樣的東西:
IntIndex INT IDENTITY(1,1),
dDateStart DATE,
IntInstrumentID INT,
IntIndex1 AS IntInstrumentID + IntIndex,
在表創建步驟。
不過,我需要的時候找到一個instrumentID
的IntIndex1
遞增無論其中記錄在表中發現,使其有效地將提供的記錄數只是看着僅在過去IntIndex1
值。而不是上面做什麼這是所有不論instrumentID
的表中的行的增量,所以你會得到5001,4002,4003等
一個例子是:對intInstruments 5000和4000
intInstrumentID | IntIndex1
--------- ------------------
5000 | 5001
5000 | 5002
4000 | 4001
5000 | 5003
4000 | 4002
我需要這樣做的原因是因爲我需要根據這些值加入兩個表格(每個instrumentID
的開始日期和結束日期)。我已經嘗試GROUP BY
等,但這不能在兩個表中工作和JOIN然後不起作用。
非常感謝
這是一個很好的答案。如果你希望它成爲一個真正的列,只需添加一個新的空列並像這樣填充它。如果你的儀器ID是1000,2000,3000,那麼這很好。如果它們是1,2,3,1,2,那麼你就搞砸了,因爲你會變成11變成12。一個小小的添加,添加一個句點,並使您的列成爲小數。這樣,你得到1變成1.1和1.2而不是11和12. –
感謝您的答案Fergus;我所擁有的是需要在遞增的instrumentID上連接在一起的2個表,並且對於每個開始日期,都有一個對應的結束日期(並且只有1個)。所以有一個「開始日期」表和一個「結束日期」表,每個表都應該按日期順序遞增,以便在JOIN後面的最終表中結束日期的結束日期。 RANK函數是有用的,但只返回1爲頂級,然後兩個等,而我需要它在分區內增加。另外,感謝您向我介紹OVER。 – user1878878
謝謝弗格斯 - 你的回答幾乎和我今天寫的一樣,但我在CREATE表中寫了RANK OVER。這是因爲我想能夠驗證這兩個表中的隨機樣本。 – user1878878