/ / Numérotation des résultats de requêtes SQL en fonction de regroupements [fermé] - mysql, sql, select

Numérotation des résultats des requêtes SQL en fonction des regroupements [fermé] - mysql, sql, select

J'ai une table contenant plusieurs lignes de données, chacunequi se voit attribuer une section composée d’une lettre et d’un chiffre (par exemple A.1). J'ai l'obligation de récupérer toutes les données de cette table et de les commander en fonction de cette section. Lors de l'extraction de ces données, il m'a été demandé de générer une nouvelle colonne numérotant chaque ligne de cette section, créant ainsi des sous-sections (par exemple, A.1.1, A.1.2).

Étant donné un groupe de données avec des "sections" par exempleun tableau avec 2 sections A.1, B.1 Je veux pouvoir numéroter chacun de ces résultats dans une colonne supplémentaire "Sous-nombre" 1, 2, 3, etc. Lorsque la ligne est une nouvelle section, cette numérotation doit recommencer.

Ce qui signifie un résultat de table comme ci-dessous:

Data    | Section | SubNumber
_______________________
record1 | A.1     | 1
record2 | A.1     | 2
record3 | A.1     | 3
record4 | B.1     | 1
record5 | B.1     | 2

J’ai essayé en SQL de créer ce sous-numéro à la volée et je ne me suis pas rapproché.

Des pensées?

Réponses:

2 pour la réponse № 1

Vous pouvez le faire en utilisant des variables:

  select t.*,
(@rn := if(@s = Section, @rn + 1,
if(@s := Section, 1, 1)
)
) as SubNumber
from table t cross join
(select @rn := 0, @s := "") vars
order by Section;

Le problème ici est que la numérotation est arbitraire au sein d'un groupe. Vous devez avoir un moyen de spécifier les chiffres. Lorsque vous décidez de le faire, ajoutez cette colonne au order by.


0 pour la réponse № 2

Utilisation d'une variable utilisateur pour ajouter le numéro de séquenceest possible, mais un problème courant est l’ordre dans lequel se trouvent les données lorsque le numéro de séquence est appliqué (plutôt que lorsque la requête est terminée). La solution consiste à obtenir les données dans une sous-requête avec une clause order by, puis à ajouter le numéro de séquence après cela.

SELECT sub0.Data, sub0.Section, @seq = if(Section = @section, @seq + 1, if (@Section := section, 1, 1))
(
SELECT Data, Section
FROM sometable
ORDER BY Section, Sequence, LibraryOpNumber
) sub0
CROSS JOIN
(
SELECT @section:="", @seq:=0
) sub1