Oracle11g 使用Oracle Partition和Over By子句检索节号
我的表格包括4列(患者、样本、分析和成分)。我试图编写一个查询,查看每个记录的患者、分析和成分组合,并指定一个“科号”。 应为每位患者重新开始编号 请参见下面的预期输出。患者1010有3个样本,但都有相同的分析成分。因此,它们都具有相同的第(1)节。 现在,患者2020的计数重新开始。该患者有2个样本,但两个样本的分析成分组合不同。因此,它们被放置在单独的第1节和第2节中Oracle11g 使用Oracle Partition和Over By子句检索节号,oracle11g,Oracle11g,我的表格包括4列(患者、样本、分析和成分)。我试图编写一个查询,查看每个记录的患者、分析和成分组合,并指定一个“科号”。 应为每位患者重新开始编号 请参见下面的预期输出。患者1010有3个样本,但都有相同的分析成分。因此,它们都具有相同的第(1)节。 现在,患者2020的计数重新开始。该患者有2个样本,但两个样本的分析成分组合不同。因此,它们被放置在单独的第1节和第2节中 Patient Sample Analysis Component Section Nu
Patient Sample Analysis Component Section Number
_______ ______ ________ _________ ______________
1010 720000140249 CALC Calcium 1
1010 720000140288 CALC Calcium 1
1010 720000140288 CALC Calcium 1
2020 720000190504 ALB Albumin 1
2020 720000160504 ALB Albumin Pct 2
3030 720000134568 CALC Calcium 1
3030 720000123404 ALB Albumin 2
3030 720000160765 ALB Albumin Pct 3
我已经编写了以下查询,但它所做的只是将具有相同组件的示例分组到一个部分中。它根本不考虑病人或分析。
非常感谢你的帮助(一如既往!)
我猜你想
dense_rank() over (partition by patient
order by analysis desc, component) myRowCount
打成平局后发生了什么?如果患者1010接受ALB分析?那会有一个MyRowCount
为2的值吗?还是4rank
将返回4dense_rank
将返回2
您如何确定一个特殊患者的行顺序?对于
分析
和组件
似乎是按相反的字母顺序进行的,但这似乎是一个非常不寻常的顺序。谢谢您的回复。谢谢您的回复。如果行数相等,可以跳过一个数字。此外,我没有任何具体的订购要求。抱歉,我不确定我的查询的哪一部分指示按字母顺序反向排序进行分析。如果您能指出这一点,我将非常感谢。@ERS-对于3030号患者,您的CALC行位于ALB行之前。白蛋白Pct排在白蛋白排之后。这就是我推断出你想要的订单的地方。我明白了-很抱歉混淆了。然而,我不能得到所需的输出,无论是排名或密集_排名。这对于只有一个分析=多个样本的成分组合的患者记录非常有效。在有不同组合的情况下,它不会给我期望的输出。我看到一些记录,其中相同的节号(或等级)应用于具有不同分析组件组合的记录。你还有什么其他建议吗?@ERS\u rank()应该很管用。也许你用错地方了。我将给出另一个答案来显示sql,但这个答案是正确的。
select x.patient, x.sample_number, x.analysis, x.component,
dense_rank() over(partition by x.patient order by x.analysis, x.component)
from X_PREV_PAT_RESULTS x
where exists (select 1 from X_PREV_PAT_RESULTS x1 where x1.COMPONENT = x.COMPONENT);
select x.patient, x.sample_number, x.analysis, x.component,
dense_rank() over(partition by x.patient order by x.analysis, x.component)
from X_PREV_PAT_RESULTS x
where exists (select 1 from X_PREV_PAT_RESULTS x1 where x1.COMPONENT = x.COMPONENT);