SQL加入问题
发布时间:2020-12-12 06:20:02 所属栏目:MsSql教程 来源:网络整理
导读:这是我的情况: 我有一张表,其中包含销售的药品清单,其中包含NDC(标识符),销售数量以及药品是品牌名称还是通用名称.我有另一张表,其中包含处方号,日期和NDC. 我需要生成前50种仿制药和前50种品牌药的最新4个处方号列表. 简化示例: Drug_list:NDC QTY Type123
这是我的情况:
我有一张表,其中包含销售的药品清单,其中包含NDC(标识符),销售数量以及药品是品牌名称还是通用名称.我有另一张表,其中包含处方号,日期和NDC. 我需要生成前50种仿制药和前50种品牌药的最新4个处方号列表. 简化示例: Drug_list: NDC QTY Type 123 50 Generic 125 47 Brand 128 34 Generic ... 549 1 Brand 294 1 Generic Claims_list: NDC RX_num Date 123 1234 20081027 123 4194 20090517 594 12598 20091012 我如何编写连接以生成列表 NDC RX1,RX2,RX3,RX4 NDC是50个最常见的“品牌”NDC,以下RX是最近声称的RX号码? ~~~~~~~ 到目前为止,我有这个: select t.ndc,cl.rx,cl.date from ( select * from ( select * from ( select * from drug_list where brand = 'Generic') order by qty) where rownum < 51) t join claims_list cl on cl.ndc = t.ndc order by t.ndc,cl.date; 这让我成为那里的一部分.从那里,我如何将其削减到每个NDC只有4个结果?并且,是否可以通过以下方式获得它: NDC,RX1,RX4 如果我必须报告为: NDC1,RX1 NDC1,RX2 NDC1,RX3 NDC1,RX4 NDC2,RX1 NDC2,RX2 NDC2,RX3 NDC2,RX4 NDC3,RX1 ... etc 但我更愿意把它放在一条线上. ~~~~ create table drug_list (NDC varchar2(15),QTY number,type varchar2(10)); create table claims_list (NDC varchar2(15),RX_num varchar2(20),"date" date); 解决方法您可以结合使用Google Analytics(如果您使用的是最近的Oracle版本)和数据透视表来完成此操作.这应该适用于您的数据集.select ndc,max(decode(rn,1,rx_num,null)) rx1,2,null)) rx2,3,null)) rx3,4,null)) rx4 from (select * from (select claims_list.ndc,claims_list.rx_num,row_number() over (partition by claims_list.ndc order by claims_list.date desc) rn from claims_list,(select * from (select * from drug_list where type = 'Generic' order by qty desc ) where rownum < 51 ) drug_list where drug_list.ndc = claims_list.ndc ) where rn < 5 order by ndc,rn ) group by ndc; 内部查询使用分析根据索赔日期为每种药物提取最新的4个rx数字.然后我们使用一个支点将它从每个药物的4行带到4行的一行. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |