2017-01-11 50 views
1

這個網站一直是我多年來的一個很好的資源,但我終於遇到了一個問題,我找不到已發佈的解決方案。創建一個計數器,重置每一個名稱的變化

我有一個名稱,日期和值的列表。我需要將日期轉換爲數字,並讓他們重新開始每個數值大於0的井。

我的想法是創建一個循環,但我缺乏使其發生的技巧。

我發現一個帖子創建計數器但不知道如何循環播放:

SELECT Name, row_number() over (order by (select NULL)) 
FROM [$ST_MASTER] 

黃列是我想要的創建

enter image description here

+0

請標記正在使用的dbms。此外,請告訴我們是否需要爲每個名稱進行重置。 –

+0

sql-server 重置必須發生在每個名稱更改處。 – robie

+0

如果有值像0,120,0,90,0,10..how應該列值看起來像一個給定的名字?他們應該是0,1,0,2,0,3還是0,1,0,1,0,1? –

回答

0

你是正確的方向。您需要通過兩種方式進行更改: 1)您需要重新啓動每個名稱的行號。 2)當數值變爲零時,您需要重新啓動行號。 之後,我們只需要放棄零數量行的行號。你會看到我通過使用ZeroOnePartSort值來做到這一點。 這個邏輯中的一個流程:這假設(根據您的數據樣本),一旦數量變爲正數名稱,它們不會再次歸零。

WITH ValSort AS (
SELECT Name, CASE WHEN value = 0 THEN 0 ELSE 1 END AS ZeroOnePart, 
    DateStamp, Value FROM dbo.STMaster 
) 
SELECT vs.Name, vs.DateStamp, vs.Value, 
ROW_NUMBER() OVER(PARTITION BY vs.Name, vs.ZeroOnePart 
       ORDER BY vs.DateStamp) * vs.ZeroOnePart 
FROM ValSort vs 
+0

這就像一個冠軍。功能的結束和分區對我來說是新的。感謝你們。 – robie

相關問題