SQL中具有不同粒度的标志
P粉824889650
P粉824889650 2024-02-25 21:48:26
0
1
344

我想说,我仍在学习如何使用 SQL,所以我所问的问题对于你们中的一些人来说可能很容易。

因此,假设我有一个名为 SAMPLE 的列和一个名为 BATCH 的列。此外,BATCH 包含一些 SAMPLE,并且由于某种原因,有一个标记链接到 SAMPLE 列 (SAMPLE_FLG)。

BATLCH_FLG 用于显示该批次中包含的至少一个样本被标记为 1。

您可以在此示例图像或下表中可视化此场景:

| sample      | batch | sample_flg | batch_flg |
|:-----------:|:-----:|:----------:|:---------:|
| A111 - 1000 | A11   |      0     |     0     |
| A111 - 200  | A11   |      0     |     0     |
| A111 - 500  | A11   |      0     |     0     |
| B234 - 700  | B234  |      0     |     0     |
| B234 - 50   | B234  |      1     |     1     |
| B234 - 75   | B234  |      0     |     0     |
| C567 - 100  | C567  |      1     |     1     |
| C567 - 700  | C567  |      1     |     0     |
| C567 - 500  | C567  |      0     |     0     |

如何通过 SQL 查询为 BATCH_FLG 列中的每个批次获取一个 1? 我的意思是,即使每个批次有多个样本被标记为 1(示例图像中的最后三行),我也不应该多次使用 1。

BATCH_FLG 列中 1 的位置并不重要。

希望你能帮助我。 谢谢。

P粉824889650
P粉824889650

全部回复(1)
P粉420958692

您可以使用 ROW_NUMBER() 来产生您想要的结果。例如:

select t.*,
  case when row_number() over(patition by batch order by sample) = 1
       then 1 else 0 end as batch_flg
from t
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板