Sql 基于组密度\u秩()值和行数()值时的情况
这是一项任务,我被赋予根据我从Sql 基于组密度\u秩()值和行数()值时的情况,sql,sql-server-2008,row-number,case-when,dense-rank,Sql,Sql Server 2008,Row Number,Case When,Dense Rank,这是一项任务,我被赋予根据我从col1,col2的行数中获得的外部索引组获取数量,col3 以下是规则: 1)在每个外部索引组内,如果col4有4055和4086,我应该得到的数量在内部索引组内4086行,通常在内部索引组中3或2 2-否则,如果col4只有4055,则直接从行中获取数量 结果是这样的 你觉得我会怎么做?当发生时,我正在考虑案例,但我不知道如何处理这种情况 多谢各位 SELECt col1,col2,col3,col4,qty ,dense_rank
col1
,col2
的行数
中获得的外部索引组
获取数量,col3
以下是规则:
1)在每个外部索引组内
,如果col4
有4055和4086,我应该得到的数量
在内部索引组内
4086行,通常在内部索引组中
3或2
2-否则,如果col4
只有4055,则直接从行中获取数量
结果是这样的
你觉得我会怎么做?当
发生时,我正在考虑案例,但我不知道如何处理这种情况
多谢各位
SELECt col1,col2,col3,col4,qty
,dense_rank() over (order by col1,col2,col3) as outer_index_group
, ROW_NUMBER() over (partition by col1,col2,col3 order by col1,col2,col3) as inner_index_group from table
这里重要的部分是(…,col4 desc)上的Rank()。它将为col1、col2、col3的每个分区中具有最大值的行分配最高秩1。因此,如果分区中有col4=4086的行,它们将得到秩1,其余col4=4055的行得到秩2;如果在某些分区中没有显示这样的行,那么col4=4055的行将在那里得到秩1
如果每个分区只需要一行(rank()可以将rnk=1分配给多行),rank()可以替换为row_number()。现在有哪个sql查询?选择col1、col2、col3、col4、qty、densite_rank()over(按col1、col2、col3排序)作为外部索引组,row_number()over(按col1、col2、col3排序,按col1、col2、col3排序)作为表
@ASh中的内部索引组,如何解决这个问题?
select * from
(
select col1,col2,col3,col4,qty
,dense_rank() over (order by col1,col2,col3) as outer_index_group
,row_number() over (partition by col1,col2,col3 order by col1,col2,col3) as inner_index_group
,RANK() over (partition by col1,col2,col3 order by col1,col2,col3,col4 desc) as rnk
from myTable
) T
where rnk = 1