2015-04-06 51 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