带条件的SQL行数()

带条件的SQL行数(),sql,sql-server,Sql,Sql Server,我在SQL Server表中有以下信息: 如何添加C1-C2-C3-C4列?要做到这一点,每个柱都有不同的条件。我使用的是id\u pv desc的行号()顺序,但它不起作用。假设从您的示例中,您希望在不满足条件时将行号置为0,否则,请尝试: Select [your columns] , case when ExpiryDate >= @someDate then row_number() over (order by [list of columns]) else

我在SQL Server表中有以下信息:


如何添加C1-C2-C3-C4列?要做到这一点,每个柱都有不同的条件。我使用的是id\u pv desc的
行号()顺序,但它不起作用。

假设从您的示例中,您希望在不满足条件时将行号置为0,否则,请尝试:

Select [your columns]
, case when ExpiryDate >= @someDate then row_number() 
    over (order by [list of columns]) 
    else 0 end as c1
, case when ExpiryDate >= @someDate and Cod_grupo = 4 then row_number() 
    over (order by [other list of columns]) 
    else 0 end as c2

我认为可以使用嵌套的case语句来实现这一点——既可以在
分区by
子句中,也可以在
行编号()之外。对于第一列:

select t.*,
       (case when expiry_date > @somdate and
                  row_number() over (partition by cod_suc, cod_ramo,
                                                  (case when expiry_date > @somdate then 1 else 0 end)
                                     order by id_pv desc) as col1
              then 1 else 0
         end)
from table t;

使用
CASE
statement我只需要
row\u number()
计数取决于列数。因此,如果我添加了
分区,
行数()
不起作用,我正在尝试C3
的这段代码(当t.fec_vig_hasta>=@varFechaHasta和t.cod_grupo_endo=4时的情况,当行数()超过时的情况(按t.cod_suc,t.cod_ramo_commercial,t.nro_pol order by t.id_pv)=1时的情况,否则0结束)作为“C3”
Ohh,当一行是顶部结果时,您是否只是尝试插入1,否则插入0?在分区上取最大值,然后进行比较,可能会更幸运。类似于当number=max(number)超过(partition by…)时的情况,那么1或0 end您可以分享一个示例。我很困惑,这和上面戈登·林诺夫的例子很相似。太好了!!!我分享了我在c3案例中所做的:
(当到期日>=@somedate和t.cod\u grupo=4时的案例,行数()超过(按t.cod\u suc、t.cod\u ramo、t.nro\u pol划分,(当到期日>=@somedate和t.cod\u grupo=4然后1其他0结束时的案例)按t.id\u pv desc=1然后1其他0结束的顺序),