2

这个会很快。我无法从函数中得到我想要的东西row_number()。我得到什么: 在此处输入图像描述

row_number()只需要在patid具有不同dailyDosage. 所以屏幕帽上的第 4-9 行应该都是 1。第 13 行应该是 1(因为它是一个新的 patid),第 14 行应该是 2(因为每日剂量的变化。我得到:

select distinct 
     ROW_NUMBER() over(partition by rx.patid,quantity/daysSup*cast(REPLACE(LEFT(strength,PATINDEX('%[^0-9]%',strength)),'m','') as int) 
     order by rx.patid,quantity/daysSup*cast(REPLACE(LEFT(strength,PATINDEX('%[^0-9]%',strength)),'m','') as int))
     ,rx.patid
    ,rx.drugName
    ,rx.strength
    ,rx.quantity
    ,rx.daysSup
    ,rx.fillDate
    ,quantity/daysSup*cast(REPLACE(LEFT(strength,PATINDEX('%[^0-9]%',strength)),'m','') as int) as dailyDosage
    from rx 
    inner join (select distinct m.patid, m.sex, m.injurylevel from members as m) as m on m.PATID=rx.patid
    where ISNUMERIC(REPLACE(LEFT(strength,PATINDEX('%[^0-9]%',strength)),'m',''))=1 
    and REPLACE(LEFT(strength,PATINDEX('%[^0-9]%',strength)),'m','') not like '%.%' 
    and drugname in ('baclofen')
    and daysSup !=0 and quantity !=0
    and daysSup > 1
    order by rx.patid

SQL Server 2008 R2

4

2 回答 2

6

我认为您正在尝试对每日剂量进行排名。尝试使用dense_rank而不是row_nubmer.

Row_number 枚举行。等级将相同的值保持在一起。Dense_rank 进行枚举,分配第一个组 1,下一个组 2,依此类推。排名在编号中留下空白。

于 2012-11-13T20:16:24.280 回答
5

你应该改变你的ROW_NUMBER并使用RANK.

于 2012-11-13T20:14:15.587 回答