数据:
| id | Year | CPT | RVU | MOD |
+----+-------------+--------+-------+-----+
| 1 | 2015 | 99212 | 12 | 26 |
| 2 | 2015 | 99212 | 23 | TC |
| 3 | 2015 | 99212 | 56 | |
| 4 | 2015 | 99213 | 59 | 53 |
| 5 | 2015 | 99214 | 60 | |
| 6 | 2015 | 99215 | 99 | 53 |
| 7 | 2015 | 99216 | 78 | |
输出:
对于CPT 99212,返回RVU = 12
对于CPT 99213,返回RVU = 59
对于CPT 99214,返回RVU = 60
为CPT 99215返回RVU = 99
CPT的MOD可以为26,TC,53或NULL。我的SQL需要先检查26,如果有26,然后返回该行的RVU,如果不是26,则剩下任何其他内容。
措辞不同:如果CPT没有MOD 26,则该CPT将只有一个可能的其他MOD供选择。如果CPT具有MOD 26,则它将始终具有随附的TC和NULL MOD。如果CPT没有26 MOD,那么无论MOD如何,我都需要获取任何可用的RVU值。因此,操作顺序是先检查26,然后在该行返回RVU,如果没有,则返回该CPT的唯一可能的RVU选择。
答案 0 :(得分:0)
您可以按{em>有条件的顺序使用row_number()
函数:
select top (1) with ties *
from table t
order by row_number() over (partition by cpt
order by (case when mod = '26' then 0 else 1 end)
);
答案 1 :(得分:0)
使用row_number()
。我认为优先顺序如下:
select t.*
from (select t.*,
row_number() over (partition by cpt
order by (case mod when '26' then 1 when 2 end)
) as seqnum
from t
) t
where seqnum = 1;
答案 2 :(得分:0)
您可以进行自我联接,以在单独的虚拟表中获取带有26
mod的CPT。
示例数据创建:
declare @Data table
( id int identity
,[year] int default 2015
,CPT nchar(5)
,RVU nchar(2)
,[MOD] nchar(2)
)
insert into @Data
(CPT, RVU, [MOD])
values
('99212', '12', '26'),
('99212', '23', 'TC'),
('99212', '56', null),
('99213', '59', '53'),
('99214', '60', null),
('99215', '99', '53'),
('99216', '78', null)
查询:
select
Data.CPT
,case
when Is26.CPT is not null then Is26.RVU
else Data.RVU
end RVU
from @Data Data
left join @Data Is26 on
Is26.CPT = Data.CPT
and Is26.[MOD] = '26'
group by
Data.CPT
,case
when Is26.CPT is not null then Is26.RVU
else Data.RVU
end