我在某些sql代码中使用了rank()和row_number()函数。一切都工作正常,除了我有[np_Exposure_Total]值为20134446与20134447的记录的部分。我希望这些基本上被视为它们是相同的数字。理想情况下,我想通过像是在正或负3之内,或者在乘以或除以1.05之类的东西来做。
在我的下面的代码中,如果是这种情况,row_number函数将从1开始并且不继续将下一个计数为3,并且在rank函数中它不会将它们排序为好像它们是同一分组的一部分。
SELECT [account_ID]
,[np_Country]
,[np_NAICS]
,[np_Exposure_Total]
,[lookup]
,[NAICS]
,[NAICS Description]
,[Indigenous Prods]
,rank() over (Partition by [account_ID], [np_Country], [np_Exposure_Total] ORDER BY [Indigenous Prods] asc) as Ind_Rank
,Row_Number() over (Partition by [account_ID], [np_Country], [np_Exposure_Total] ORDER BY [Indigenous Prods] asc) as Ind_Row
FROM [Null_Limits].[dbo].[Variable to Risk Code Link]
ORDER BY [account_ID] asc
答案 0 :(得分:2)
使用case
:
rank() over (Partition by [account_ID], [np_Country],
(case when [np_Exposure_Total] in (20134446, 20134447) then 20134446
else np_Exposure_Total
end)
ORDER BY [Indigenous Prods] asc
) as Ind_Rank
不要开始摆弄这些值(通过做floor(np_Exposure_Total*1.0001)
之类的事情),因为这可能会对其他值产生意想不到的副作用。如果您希望所有值的逻辑彼此接近,则只放入这样的表达式。