Flags mit unterschiedlicher Granularität in SQL
P粉824889650
P粉824889650 2024-02-25 21:48:26
0
1
340

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粉824889650
P粉824889650

Antworte allen(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
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage