搜索

首页  >  问答  >  正文

SQL中具有不同粒度的标志

我想说,我仍在学习如何使用 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粉824889650P粉824889650335 天前349

全部回复(1)我来回复

  • P粉420958692

    P粉4209586922024-02-26 00:52:28

    您可以使用 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

    回复
    0
  • 取消回复