Maison  >  Questions et réponses  >  le corps du texte

Indicateurs avec une granularité différente dans SQL

Je voudrais dire que j'apprends encore à utiliser SQL, donc les questions que je pose peuvent être faciles pour certains d'entre vous.

Alors, disons que j'ai une colonne appelée SAMPLE et une colonne appelée BATCH. De plus, BATCH contient des SAMPLE et, pour une raison quelconque, il existe une balise liée à la colonne SAMPLE (SAMPLE_FLG).

BATLCH_FLG est utilisé pour montrer qu'au moins un échantillon contenu dans le lot est marqué comme 1.

Vous pouvez visualiser ce scénario dans cet exemple d'image ou dans le tableau ci-dessous :

| 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     |

Comment obtenir un 1 pour chaque lot dans la colonne BATCH_FLG via une requête SQL ? Ce que je veux dire, c'est que je ne devrais pas utiliser 1 plusieurs fois même s'il y a plusieurs échantillons par lot qui sont étiquetés 1 (les trois dernières lignes de l'image d'exemple).

La position du 1 dans la colonne

BATCH_FLG n'a pas d'importance.

J'espère que vous pourrez m'aider. Merci. 🎜
P粉824889650P粉824889650236 Il y a quelques jours276

répondre à tous(1)je répondrai

  • P粉420958692

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

    Vous pouvez utiliser ROW_NUMBER() pour produire les résultats souhaités. Par exemple :

    select t.*,
      case when row_number() over(patition by batch order by sample) = 1
           then 1 else 0 end as batch_flg
    from t

    répondre
    0
  • Annulerrépondre