2016-08-04 28 views
0

我需要幫助,在SQL Server中傳遞查詢。SQL Server中的2列上的傳遞組查詢

我有一張[ID]和[GRPID]的表格。

我想更新第三列[NEWGRPID]基於以下邏輯:

  1. 對於每個[ID],得到其GRPID;
  2. 從(1)中獲取與GRPID相關的所有ID;
  3. 集[NEWGRPID]等於一個整數(變量遞增1),對於所有行的從步驟(2)

的想法是幾個這些ID被「傳遞地」在不同的連接[GRPID],並且都應該具有相同的[GRPID]。

下表是預期結果,[NEWGRPID]填充。

ID  GRPID NEWGRPID 
----- ----- ------ 
1  345  1 
1  777  1 
2  777  1 
3  345  1 
3  777  1 
4  345  1 
4  999  1 
5  345  1 
5  877  1 
6  999  1 
7  877  1 
8  555  2 
9  555  2 

回答

0

試試這個代碼:

IF OBJECT_ID('tempdb..#tmp') IS NOT NULL 
    BEGIN 
     DROP TABLE #tmp; 
    END; 

SELECT GRPID, count (*) AS GRPCNT 
INTO #tmp 
FROM yourtable 
GROUP BY GRPID 

UPDATE TGT 
SET TGT.NEWGRPID = SRC.GRPCNT 
FROM yourtable TGT 
JOIN #tmp ON #tmp.GRPID = TGT.GRPID 

如果值可能隨着時間的推移,你應該想想計算列或觸發改變。

+0

謝謝帕維爾。結果返回3個不同的[NEWGRPID],應根據邏輯返回2個不同的結果。 我認爲需要什麼是沿着什麼是在這個問題的線,但不知道... http://stackoverflow.com/questions/18033115/how-to-label-transitive-groups-with-sql – NScara

+0

這個可以嗎?對不起,我以爲你想在所有具有匹配GRPID的行上設置一個計數器。如果您需要第二條語句中的對(ID,GRPID)的計數器,請使用SELECT ID,GRPID,COUNT(*)作爲IDGRPCNT並按ID,GRPID分組。然後在更新語句中的聯接條件中添加ID。 – PacoDePaco

+0

我的錯誤,通過計數器我的意思是一個增量爲1的變量,而不是計數行集。爲了清晰起見,請嘗試更新問題 謝謝。 – NScara