Heim  >  Fragen und Antworten  >  Hauptteil

Flags mit unterschiedlicher Granularität in SQL

Ich möchte sagen, dass ich immer noch lerne, wie man SQL verwendet, sodass die Fragen, die ich stelle, für einige von Ihnen möglicherweise einfach sind.

Angenommen, ich habe eine Spalte namens SAMPLE und eine Spalte namens BATCH. Darüber hinaus enthält BATCH einige SAMPLE, und aus irgendeinem Grund ist ein Tag mit der SAMPLE-Spalte (SAMPLE_FLG) verknüpft.

BATLCH_FLG wird verwendet, um anzuzeigen, dass mindestens eine in der Charge enthaltene Probe als 1 markiert ist.

Sie können dieses Szenario in diesem Beispielbild oder in der folgenden Tabelle visualisieren:

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

Wie erhalte ich per SQL-Abfrage eine 1 für jede Charge in der Spalte BATCH_FLG? Was ich meine ist, dass ich 1 nicht mehrmals verwenden sollte, obwohl es mehrere Proben pro Charge gibt, die mit 1 gekennzeichnet sind (letzte drei Zeilen im Beispielbild).

Die Position der 1 in der Spalte

BATCH_FLG ist nicht wichtig.

Ich hoffe, Sie können mir helfen. Danke. 🎜
P粉824889650P粉824889650236 Tage vor278

Antworte allen(1)Ich werde antworten

  • 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

    Antwort
    0
  • StornierenAntwort