带条件的SQL行数()
我在SQL Server表中有以下信息:带条件的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
如何添加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结束的顺序),