2
我有6列:SQL服務器ROW_COUNT與復位
Date, Account, Side, Symbol, Currency, Reset Flag (0 Yes, 1 No)
我想通過排了數分區,但重置行計數每當0出現在Reset Flag
列。前5列不是唯一的,但它們的組合形成了一組獨特的列。
請幫我這個!
每隔解決方案,我已經研究出於某種原因不工作:/
我有6列:SQL服務器ROW_COUNT與復位
Date, Account, Side, Symbol, Currency, Reset Flag (0 Yes, 1 No)
我想通過排了數分區,但重置行計數每當0出現在Reset Flag
列。前5列不是唯一的,但它們的組合形成了一組獨特的列。
請幫我這個!
每隔解決方案,我已經研究出於某種原因不工作:/
這是一個空白和島嶼風格的問題。而不會在外部查詢通過ResetFlag
與數行中所有樣本的數據或所期望的結果...
使用兩個row_number()
通過復位標誌,以確定組,和另一個與中內部查詢創建的grp
。
將date, Account, Side, Symbol, Currency
的順序更改爲您希望爲行編號的那些列的順序;讓他們保持在三個row_number()
s中的每一個的相同順序。
/* ----- */
select
date
, Account
, Side
, Symbol
, Currency
, ResetFlag
, rn = case when ResetFlag = 0 then 0
else row_number() over (
partition by ResetFlag, grp
order by date, Account, Side, Symbol, Currency)
end
from (
select *
, grp = row_number() over (order by date, Account, Side, Symbol, Currency)
- row_number() over (
partition by ResetFlag
order by date, Account, Side, Symbol, Currency)
from t
) s
order by date, Account, Side, Symbol, Currency
rextester演示:http://rextester.com/VLCO32635
回報:
+------------+---------+------+--------+----------+-----------+----+
| date | Account | Side | Symbol | Currency | ResetFlag | rn |
+------------+---------+------+--------+----------+-----------+----+
| 2017-01-01 | 7 | 2 | 3 | 7,0000 | 1 | 1 |
| 2017-01-02 | 8 | 9 | 9 | 6,0000 | 1 | 2 |
| 2017-01-03 | 4 | 1 | 5 | 6,0000 | 1 | 3 |
| 2017-01-04 | 5 | 4 | 8 | 5,0000 | 0 | 0 |
| 2017-01-05 | 2 | 1 | 3 | 1,0000 | 1 | 1 |
| 2017-01-06 | 8 | 0 | 2 | 0,0000 | 0 | 0 |
| 2017-01-07 | 0 | 3 | 8 | 9,0000 | 1 | 1 |
| 2017-01-08 | 0 | 3 | 1 | 3,0000 | 1 | 2 |
+------------+---------+------+--------+----------+-----------+----+
非常感謝!如果你能向我解釋grp在做什麼,這將是非常有幫助的 –
@NewbieCoder grp是每個邏輯組的唯一編號,它使用兩個運行編號('row_number()')計算得出。兩者共享相同的'order by',但具有不同的分區(在這種情況下,一個沒有分區,另一個分區)。這可能會讓事情變得更清楚:http://rextester.com/KFJHA53489 – SqlZim
非常感謝! –