SQL Server Row_Count带重置

3

我有6列:

Date, Account, Side, Symbol, Currency, Reset Flag (0 Yes, 1 No)

我想通过分区计数行,但每当“重置标志”列中出现0时都要重置行计数。前5列不是唯一的,但它们的组合形成了一个唯一的列集。
请帮助我解决这个问题!
我已经研究了其他的解决方案,但由于某些原因它们都无法工作 :/
1个回答

2
这是一个间隙和岛屿风格的问题。没有任何样本数据或期望的结果...
使用两个row_number()通过重置标志来识别组,并在外部查询中使用另一个对行进行编号,以及在内部查询中创建的ResetFlaggrp
date,Account,Side,Symbol,Currency的顺序更改为您想要按行编号的这些列的任何顺序; 对于这三个row_number(),保持它们的顺序相同。
/* ----- */ 
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在做什么,那将非常有帮助。 - Newbie Coder
@NewbieCoder grp是每个逻辑组的唯一编号,该编号使用两个运行编号(row_number())计算而来。两者都使用相同的order by,但具有不同的分区(在本例中一个没有分区,另一个有分区)。这可能会使情况更加清晰: http://rextester.com/KFJHA53489 - SqlZim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接