2015-04-06 134 views
1

我在SQL Server表的以下信息:SQL ROW_NUMBER()与条件

enter image description here

如何添加C1-C2-C3-C4列?为此,每个柱子都有不同的条件。我正在使用row_number() order by id_pv desc,但它不起作用。

+0

使用'CASE'语句 – sqluser

回答

2

我认为你可以嵌套case语句做到这一点 - 无论是在partition by条款和row_number()以外。对于第一列:

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; 
+0

完美!我分享了我在c3中所做的事情:'(当expiry_date> = @somedate和t.cod_grupo = 4且row_number()覆盖时(由t.cod_suc,t.cod_ramo,t.nro_pol, 和\t分区时,情况为 \t \t \t(情况 \t \t \t \t当EXPIRY_DATE> = @somedate和t.cod_grupo = 4,则1 \t \t \t \t别的0 \t \t \t端)通过t.id_pv降序 \t \t \t顺序)= 1,则1 else 0 end),' –

1

从你的例子假设你想让它放在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 
+0

我只需要'row_number()'计数取决于列。所以,如果我加上'分区by','ROW_NUMBER()'不工作 –

+0

我想为C3这个代码'(案例 \t当t.fec_vig_hasta> = @varFechaHasta和t.cod_grupo_endo = 4,则 \t \t情况下 \t \t \t时ROW_NUMBER()以上(由t.cod_suc,t.cod_ramo_comercial,通过t.id_pv t.nro_pol顺序分区)= 1,则1 \t \t \t别的0 \t \t端 \t别的0 端)as'C3'' –

+0

Ohh,你只是想插入1当一行是最高结果和0除此以外?将分区上的最大值再比较,你可能会有更好的运气。当数字=最大(数字)结束时(分区由...),然后1其他0结束 – APH