处理 ROW_NUMBER 函数中的 NULLS

问题描述 投票:0回答:0

我有一个任务,我必须将排名赋予 NULLS 相对于它的其他非空重复值。

我有一个名为

TABLEA
的表,列为
ID, DATE and Amount
。有一些规则从
TABLEA
过滤几行,列为
ID1, DATE1 and Amount1
和过滤器插入
TABLEB
后的最终结果。 现在我做了 Table A left Join Table B,结果如下。

  ID      Date        AMOUNT    ID1      Date1        AMOUNT1    
  ---------------------------------------------------------------
  1       2022-10-17    400       NULL     NULL         NULL     
  1       2022-10-18    300       1       2022-10-18    300       
  2       2022-10-19    432       2       2022-10-19    432       
  2       2022-10-20    100       NULL    NULL          NULL 
  2       2022-10-24    200       NULL    NULL          NULL        
  2       2022-10-21    234       2       2022-10-21    234        
  3       2022-10-22    213       3       2022-10-22    213        
  3       2022-10-23    112       3       2022-10-23    112       
  3       2022-10-24    218       3       NULL          NULL       
  4       2022-10-23    654       4       2022-10-18    654         
  5       2022-10-28    500       NULL    NULL          NULL        
  

我想要在下面示例的行号列中显示的排名。我正在按 ID 分组并按日期排序。

  ID      Date        AMOUNT    ID1      Date1        AMOUNT1    Row Number
  ----------------------------------------------------------------------------
  1       2022-10-17    400       NULL     NULL         NULL        1
  1       2022-10-18    300       1       2022-10-18    300         1
  2       2022-10-19    432       2       2022-10-19    432         1
  2       2022-10-20    100       NULL    NULL          NULL        1
  2       2022-10-24    200       NULL    NULL          NULL        1
  2       2022-10-21    234       2       2022-10-21    234         2
  3       2022-10-22    213       3       2022-10-22    213         1
  3       2022-10-23    112       3       2022-10-23    112         2
  3       2022-10-24    218       3       NULL          NULL        2
  4       2022-10-23    654       4       2022-10-18    654         1
  5       2022-10-28    500       NULL    NULL          NULL        1

我尝试使用 row_number/dense_rank/rank 函数,但找不到解决方案。

SQL 查询已尝试:

Select a.ID , a.date , a.amount , b.id1, b.date1, b.amount1 from TableA a
, row_number() over (partition by b.id1 order by case when b.date1 is not null then b.date1 end) ROW Number 
left join TableB b
on a.id = b.id 

我正在使用行号,因为我的任务是对前 2 个 amount1 求和。为了 示例:ID 1 有 2 个数量 400 和 300,但数量 1 只有一个,即 300. 所以我必须求和得到数量列中的 400 和 300 以及数量 1 列中的 300 的总和。另一个例子,对于 ID = 2 ,列 Amount 的总和 将是 (432 + 100+ 200 + 234) 并且 Amount1 的总和是 (432 + 234) 作为 这些是 ID=2 的前两个。

sql sql-server window-functions row-number
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.