IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Requête sur même table pour déterminer un groupe


Sujet :

Langage SQL

  1. #1
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut Requête sur même table pour déterminer un groupe
    Bonjour à tous,

    J'ai une BDD Access (pas de chance ) avec une table qui contient des lignes de devis.
    Voici à quoi ressemble son contenu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    Code	 | NumLig	 | NumBuf	 | IdTranche	 | IdSsTotal	 | NivTr	 | NivOuv	 | Type	 | Numerotation	 | CodeElem
    M11.0174	 | 0	 | 0	 | 0	 | 	 | 1	 | 0	 | T	 | 	 | 
    M11.0174	 | 1	 | 364	 | 0C	 | 	 | 1	 | 0	 | T	 | 1	 | 1
    M11.0174	 | 2	 | 360	 | 0C	 | 	 | 1	 | 0	 |  	 | 	 | 
    M11.0174	 | 3	 | 4	 | 2	 | 	 | 2	 | 0	 | T	 | 1.1	 | 1.1
    M11.0174	 | 4	 | 366	 | 2	 | 	 | 2	 | 0	 |  	 | 	 | 
    M11.0174	 | 5	 | 365	 | 1	 | 	 | 3	 | 0	 | T	 | 1.1.1	 | 1.1.1
    M11.0174	 | 6	 | 3	 | 1	 | 	 | 3	 | 0	 |  	 | 	 | 
    M11.0174	 | 7	 | 47	 | 1	 | 	 | 3	 | 1	 | O	 | 1.1.1.1	 | 0CA
    M11.0174	 | 8	 | 48	 | 1	 | 	 | 3	 | 2	 | o	 | 	 | 0SMATA
    M11.0174	 | 9	 | 272	 | 1	 | 	 | 3	 | 2	 | F	 | 	 | 0MA
    M11.0174	 | 10	 | 295	 | 1	 | 	 | 3	 | 2	 | F	 | 	 | 0LF
    M11.0174	 | 11	 | 270	 | 1	 | 	 | 3	 | 2	 | F	 | 	 | 0MN
    M11.0174	 | 12	 | 271	 | 1	 | 	 | 3	 | 2	 | F	 | 	 | 0MN
    M11.0174	 | 13	 | 52	 | 1	 | 	 | 3	 | 2	 | F	 | 	 | 0MN
    M11.0174	 | 14	 | 53	 | 1	 | 	 | 3	 | 2	 | o	 | 	 | 0SMOA
    M11.0174	 | 15	 | 55	 | 1	 | 	 | 3	 | 2	 | M	 | 	 | 0FT
    M11.0174	 | 16	 | 56	 | 1	 | 	 | 3	 | 2	 | M	 | 	 | 0PMA
    M11.0174	 | 17	 | 57	 | 1	 | 	 | 3	 | 2	 | a	 | 	 | 0EA
    M11.0174	 | 18	 | 58	 | 1	 | 	 | 3	 | 2	 | M	 | 	 | 0DA
    M11.0174	 | 19	 | 59	 | 1	 | 	 | 3	 | 2	 | M	 | 	 | 0CTMA
    M11.0174	 | 20	 | 296	 | 1	 | 	 | 3	 | 0	 |  	 | 	 | 
    M11.0174	 | 21	 | 237	 | 1	 | 	 | 3	 | 1	 | O	 | 1.1.1.2	 | 0CA
    M11.0174	 | 22	 | 238	 | 1	 | 	 | 3	 | 2	 | o	 | 	 | 0SMATA
    M11.0174	 | 23	 | 242	 | 1	 | 	 | 3	 | 2	 | F	 | 	 | 0MN
    M11.0174	 | 24	 | 243	 | 1	 | 	 | 3	 | 2	 | o	 | 	 | 0SMOA
    M11.0174	 | 25	 | 246	 | 1	 | 	 | 3	 | 2	 | M	 | 	 | 0PMA
    M11.0174	 | 26	 | 247	 | 1	 | 	 | 3	 | 2	 | a	 | 	 | 0EA
    M11.0174	 | 27	 | 248	 | 1	 | 	 | 3	 | 2	 | M	 | 	 | 0DA
    M11.0174	 | 28	 | 249	 | 1	 | 	 | 3	 | 2	 | M	 | 	 | 0CTMA
    M11.0174	 | 29	 | 60	 | 1	 | 	 | 3	 | 0	 |  	 | 	 | 
    M11.0174	 | 30	 | 367	 | 0D	 | 	 | 3	 | 0	 | T	 | 1.1.2	 | 1.1.2
    M11.0174	 | 31	 | 5	 | 0D	 | 	 | 3	 | 0	 |  	 | 	 | 
    M11.0174	 | 32	 | 8	 | 0D	 | 	 | 3	 | 1	 | O	 | 1.1.2.1	 | 0CA
    M11.0174	 | 33	 | 9	 | 0D	 | 	 | 3	 | 2	 | o	 | 	 | 0SMATA
    M11.0174	 | 34	 | 10	 | 0D	 | 	 | 3	 | 2	 | F	 | 	 | 0MA
    M11.0174	 | 35	 | 298	 | 0D	 | 	 | 3	 | 2	 | F	 | 	 | 0LF
    M11.0174	 | 36	 | 275	 | 0D	 | 	 | 3	 | 2	 | F	 | 	 | 0MN
    M11.0174	 | 37	 | 276	 | 0D	 | 	 | 3	 | 2	 | F	 | 	 | 0MN
    M11.0174	 | 38	 | 13	 | 0D	 | 	 | 3	 | 2	 | F	 | 	 | 0MN
    M11.0174	 | 39	 | 14	 | 0D	 | 	 | 3	 | 2	 | o	 | 	 | 0SMOA
    M11.0174	 | 40	 | 16	 | 0D	 | 	 | 3	 | 2	 | M	 | 	 | 0FT
    M11.0174	 | 41	 | 17	 | 0D	 | 	 | 3	 | 2	 | M	 | 	 | 0PMA
    M11.0174	 | 42	 | 19	 | 0D	 | 	 | 3	 | 2	 | a	 | 	 | 0EA
    M11.0174	 | 43	 | 20	 | 0D	 | 	 | 3	 | 2	 | M	 | 	 | 0DA
    M11.0174	 | 44	 | 21	 | 0D	 | 	 | 3	 | 2	 | M	 | 	 | 0CTMA
    M11.0174	 | 45	 | 251	 | 0D	 | 	 | 3	 | 0	 |  	 | 	 | 
    M11.0174	 | 46	 | 252	 | 0D	 | 	 | 3	 | 1	 | O	 | 1.1.2.2	 | 0CA
    M11.0174	 | 47	 | 253	 | 0D	 | 	 | 3	 | 2	 | o	 | 	 | 0SMATA
    M11.0174	 | 48	 | 257	 | 0D	 | 	 | 3	 | 2	 | F	 | 	 | 0MN
    M11.0174	 | 49	 | 258	 | 0D	 | 	 | 3	 | 2	 | o	 | 	 | 0SMOA
    M11.0174	 | 50	 | 261	 | 0D	 | 	 | 3	 | 2	 | M	 | 	 | 0PMA
    M11.0174	 | 51	 | 262	 | 0D	 | 	 | 3	 | 2	 | a	 | 	 | 0EA
    M11.0174	 | 52	 | 263	 | 0D	 | 	 | 3	 | 2	 | M	 | 	 | 0DA
    M11.0174	 | 53	 | 264	 | 0D	 | 	 | 3	 | 2	 | M	 | 	 | 0CTMA
    M11.0174	 | 54	 | 23	 | 0D	 | 	 | 3	 | 0	 |  	 | 	 | 
    M11.0174	 | 55	 | 368	 | 3	 | 	 | 3	 | 0	 | T	 | 1.1.3	 | 1.1.3
    M11.0174	 | 56	 | 75	 | 3	 | 	 | 3	 | 0	 |  	 | 	 | 
    M11.0174	 | 57	 | 76	 | 3	 | 	 | 3	 | 1	 | O	 | 1.1.3.1	 | 0CA
    M11.0174	 | 58	 | 77	 | 3	 | 	 | 3	 | 2	 | o	 | 	 | 0SMATA
    M11.0174	 | 59	 | 300	 | 3	 | 	 | 3	 | 2	 | F	 | 	 | 0MA
    M11.0174	 | 60	 | 301	 | 3	 | 	 | 3	 | 2	 | F	 | 	 | 0MN
    M11.0174	 | 61	 | 303	 | 3	 | 	 | 3	 | 2	 | F	 | 	 | 0MN
    M11.0174	 | 62	 | 266	 | 3	 | 	 | 3	 | 2	 | F	 | 	 | 0MN
    M11.0174	 | 63	 | 81	 | 3	 | 	 | 3	 | 2	 | F	 | 	 | 0MN
    M11.0174	 | 64	 | 82	 | 3	 | 	 | 3	 | 2	 | o	 | 	 | 0SMOA
    M11.0174	 | 65	 | 84	 | 3	 | 	 | 3	 | 2	 | M	 | 	 | 0FT
    M11.0174	 | 66	 | 85	 | 3	 | 	 | 3	 | 2	 | M	 | 	 | 0PMA
    M11.0174	 | 67	 | 86	 | 3	 | 	 | 3	 | 2	 | a	 | 	 | 0EA
    M11.0174	 | 68	 | 87	 | 3	 | 	 | 3	 | 2	 | M	 | 	 | 0DA
    M11.0174	 | 69	 | 88	 | 3	 | 	 | 3	 | 2	 | M	 | 	 | 0CTMA
    M11.0174	 | 70	 | 89	 | 3	 | 	 | 3	 | 0	 |  	 | 	 | 
    M11.0174	 | 71	 | 369	 | 4	 | 	 | 3	 | 0	 | T	 | 1.1.4	 | 1.1.4
    M11.0174	 | 72	 | 105	 | 4	 | 	 | 3	 | 0	 |  	 | 	 | 
    M11.0174	 | 73	 | 106	 | 4	 | 	 | 3	 | 1	 | O	 | 1.1.4.1	 | 0CA
    M11.0174	 | 74	 | 107	 | 4	 | 	 | 3	 | 2	 | o	 | 	 | 0SMATA
    M11.0174	 | 75	 | 108	 | 4	 | 	 | 3	 | 2	 | F	 | 	 | 0MA
    M11.0174	 | 76	 | 307	 | 4	 | 	 | 3	 | 2	 | F	 | 	 | 0MN
    M11.0174	 | 77	 | 305	 | 4	 | 	 | 3	 | 2	 | F	 | 	 | 0LF
    M11.0174	 | 78	 | 111	 | 4	 | 	 | 3	 | 2	 | F	 | 	 | 0MN
    M11.0174	 | 79	 | 112	 | 4	 | 	 | 3	 | 2	 | o	 | 	 | 0SMOA
    M11.0174	 | 80	 | 113	 | 4	 | 	 | 3	 | 2	 | M	 | 	 | 0FA
    M11.0174	 | 81	 | 115	 | 4	 | 	 | 3	 | 2	 | M	 | 	 | 0PMA
    M11.0174	 | 82	 | 116	 | 4	 | 	 | 3	 | 2	 | a	 | 	 | 0EA
    M11.0174	 | 83	 | 117	 | 4	 | 	 | 3	 | 2	 | M	 | 	 | 0DA
    M11.0174	 | 84	 | 118	 | 4	 | 	 | 3	 | 2	 | M	 | 	 | 0CTMA
    M11.0174	 | 85	 | 119	 | 4	 | 	 | 3	 | 0	 |  	 | 	 |
    Je cherche à faire une requête qui me permette de prendre chaque groupe de type O.
    Pour le premier groupe par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    "M11.0174	 | 7	 | 47	 | 1	 | 	 | 3	 | 1	 | O	 | 1.1.1.1	 | 0CA"
    "M11.0174	 | 8	 | 48	 | 1	 | 	 | 3	 | 2	 | o	 | 	 | 0SMATA"
    "M11.0174	 | 9	 | 272	 | 1	 | 	 | 3	 | 2	 | F	 | 	 | 0MA"
    "M11.0174	 | 10	 | 295	 | 1	 | 	 | 3	 | 2	 | F	 | 	 | 0LF"
    "M11.0174	 | 11	 | 270	 | 1	 | 	 | 3	 | 2	 | F	 | 	 | 0MN"
    "M11.0174	 | 12	 | 271	 | 1	 | 	 | 3	 | 2	 | F	 | 	 | 0MN"
    "M11.0174	 | 13	 | 52	 | 1	 | 	 | 3	 | 2	 | F	 | 	 | 0MN"
    "M11.0174	 | 14	 | 53	 | 1	 | 	 | 3	 | 2	 | o	 | 	 | 0SMOA"
    "M11.0174	 | 15	 | 55	 | 1	 | 	 | 3	 | 2	 | M	 | 	 | 0FT"
    "M11.0174	 | 16	 | 56	 | 1	 | 	 | 3	 | 2	 | M	 | 	 | 0PMA"
    "M11.0174	 | 17	 | 57	 | 1	 | 	 | 3	 | 2	 | a	 | 	 | 0EA"
    "M11.0174	 | 18	 | 58	 | 1	 | 	 | 3	 | 2	 | M	 | 	 | 0DA"
    "M11.0174	 | 19	 | 59	 | 1	 | 	 | 3	 | 2	 | M	 | 	 | 0CTMA"
    "M11.0174	 | 20	 | 296	 | 1	 | 	 | 3	 | 0	 |  	 | 	 | "
    Est il possible de faire quelque chose ?
    Car il n'y a pas vraiment de lien entre les ligne et les sous lignes.
    C'est à dire que selon le NivOuv on sait que ce sont des lignes enfants mais comment retrouver le parent.

    Merci à vous
    Par pitié !!!! :Si vous ne savez pas faire cliquez ici !
    Citation Envoyé par Marc-L
    C'est dommage que parfois tu sois aussi lourd que tu as l'air intelligent…

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 776
    Points
    30 776
    Par défaut
    Je cherche à faire une requête qui me permette de prendre chaque groupe de type O.
    Comment identifie-t-on un groupe ? Et son type ?

    Quelles requêtes as-tu déjà essayées ?
    En quoi le résultat obtenu n'était-il pas bon ?
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut
    Alors un groupe commence par un type O et se termine au prochain O

    En fait ce que je cherche surtout c'est à récupérer la quantité qui se trouve sur la ligne maîtresse (de type O donc) et de la répercuté sur les sous lignes afin de pouvoir calculer le prix de chaque sous lignes.

    J'ai essayer avec des INNER JOIN en faisant une table avec une sous requetes pour avoir juste les lignes O mais je n'y arrive pas.
    Par pitié !!!! :Si vous ne savez pas faire cliquez ici !
    Citation Envoyé par Marc-L
    C'est dommage que parfois tu sois aussi lourd que tu as l'air intelligent…

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 776
    Points
    30 776
    Par défaut
    Dans quelles colonnes trouve-t-on ces informations ?
    Comment lie-t-on une ligne maitresse à ses sous-lignes ?
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  5. #5
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut
    La colonne Type permet d'identifier les O de début d'ouvrages.

    Le lien entre la ligne maîtresse (O) est les sous lignes est bien mon problème
    Je ne vois pas comment l'établir et j'aurais besoin d'une idée à ce sujet
    Par pitié !!!! :Si vous ne savez pas faire cliquez ici !
    Citation Envoyé par Marc-L
    C'est dommage que parfois tu sois aussi lourd que tu as l'air intelligent…

  6. #6
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 126
    Points : 38 509
    Points
    38 509
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par cerede2000 Voir le message
    Alors un groupe commence par un type O et se termine au prochain O

    En fait ce que je cherche surtout c'est à récupérer la quantité qui se trouve sur la ligne maîtresse (de type O donc) et de la répercuté sur les sous lignes afin de pouvoir calculer le prix de chaque sous lignes..
    Le problème c'est que les lignes d'une base de donnée n'ayant aucun ordre, la notion de "prochain" n'a pas de sens
    Peut être pouvez vous expliquer par l'exemple quelles sont les lignes que vous voulez associer comme un tout, dans un extrait de jeu de données

  7. #7
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut
    Oui malheureusement j'en suis conscient, mais je doit faire avec cette table
    Elle vient d'un progiciel de gestion de chantier vendu par une grande enseigne...

    En faite mon but final est d'arriver à avoir ceci
    Ligne O :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    M11.0174	 | 7	 | 47	 | 1	 | 	 | 3	 | 1	 | O	 | 1.1.1.1	 | 0CA
    Lignes M :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    M11.0174	 | 15	 | 55	 | 1	 | 	 | 3	 | 2	 | M	 | 	 | 0FT
    M11.0174	 | 16	 | 56	 | 1	 | 	 | 3	 | 2	 | M	 | 	 | 0PMA
    M11.0174	 | 18	 | 58	 | 1	 | 	 | 3	 | 2	 | M	 | 	 | 0DA
    M11.0174	 | 19	 | 59	 | 1	 | 	 | 3	 | 2	 | M	 | 	 | 0CTMA
    Et au final :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    M11.0174	 | 15	 | 55	 | 1	 | 	 | 3	 | 2	 | M	 | 	 | 0FT   | Info provenant de la ligne O
    M11.0174	 | 16	 | 56	 | 1	 | 	 | 3	 | 2	 | M	 | 	 | 0PMA  | Info provenant de la ligne O
    M11.0174	 | 18	 | 58	 | 1	 | 	 | 3	 | 2	 | M	 | 	 | 0DA   | Info provenant de la ligne O
    M11.0174	 | 19	 | 59	 | 1	 | 	 | 3	 | 2	 | M	 | 	 | 0CTMA | Info provenant de la ligne O
    J'ai essayé ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT f1, f2, f3, f4, (SELECT TOP 1 Qte FROM DevisLigne DL WHERE Type = 'O' AND NivOuv = 1 AND DL.NumLig < DL1.NumLig ORDER BY NumLig Desc)
    FROM DevisLigne DL1
    WHERE DevisLigne.Code = '15.0510Q'
    AND (LEFT(DevisLigne.CodeElem, 2) = '0E' OR LEFT(DevisLigne.CodeElem, 3) = '0PP')
    Ça donne ce que je veux mais je ne peux récupérer qu'un seul champ à la fois et en terme de perf j'image qu' c'est assez désastreux...
    Par pitié !!!! :Si vous ne savez pas faire cliquez ici !
    Citation Envoyé par Marc-L
    C'est dommage que parfois tu sois aussi lourd que tu as l'air intelligent…

  8. #8
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 147
    Points : 7 392
    Points
    7 392
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Voici une requête (utilisant une CTE, pas de chance, ça vous oblige à la réécrire vu qu'Access ne supporte pas cette syntaxe) qui devrait cependant vous mettre sur la piste (à vue de nez, quelques sous-requêtes et le tour est joué) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    -- La structure "utile" de la table
    create table ouvrage
    (
    	id int not null primary key, -- compteur qui "ordonne" les lignes
    	typ char(1) not null, -- l'indicateur qui permet de savoir si une ligne est entête ou non
    	prix decimal(18,2) not null -- le prix de la ligne
    );
    go
    
    -- Quelques données pour voir si j'ai bien compris
    insert into ouvrage (id, typ, prix) values (1, 'O', 1), (2, 'a', 2), (3, 'b', 5), (4, 'O', 1), (5, 'f', 10), (6, 'r', 6), (7, 'O', 12), (8, 'O', 9);
    
    with
    -- Etape 1 : on récupère les lignes de type "O" (entêtes)
    entete (id, prix)
    as
    (
    	select id, prix from ouvrage where typ = 'O'
    ),
    -- Etape 2 : pour chaque entête, on récupère le numéro de la prochaine entête
    entete_et_suivante (id, id_suivante)
    as
    (
    	select e1.id, coalesce(min(e2.id), 9999) -- 9999 est une valeur arbitraire supérieure au MAX de la colonne compteur
    	from entete e1
    	left outer join entete e2 on e2.id > e1.id
    	group by e1.id
    ),
    -- Etape 3 : on récupère les lignes "filles", c'est à dire dont l'ID est compris strictement entre ID et ID_SUIVANTE de chaque entête
    ligne (id, prix)
    as
    (
    	select entete_et_suivante.id, coalesce(sum(ligne.prix), 0)
    	from entete_et_suivante
    	left outer join ouvrage ligne on ligne.id > entete_et_suivante.id and ligne.id < entete_et_suivante.id_suivante
    	group by entete_et_suivante.id
    )
    -- Etape 4 : on remet tout ça ensemble...
    select entete.id, entete.prix + ligne.prix
    from entete
    inner join ligne on ligne.id = entete.id;
    On ne jouit bien que de ce qu’on partage.

  9. #9
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 126
    Points : 38 509
    Points
    38 509
    Billets dans le blog
    9
    Par défaut
    C'est un peu fastidieux mais comment faire mieux vu le modèle de données
    Donc GG comme on dit chez les gamers

  10. #10
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut
    Oua @StringBuilder c'est beau !

    En effet reste à voir comment adapter avec Access

    Merci beaucoup.
    Par pitié !!!! :Si vous ne savez pas faire cliquez ici !
    Citation Envoyé par Marc-L
    C'est dommage que parfois tu sois aussi lourd que tu as l'air intelligent…

  11. #11
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut
    Pour ceux qui chercherais un moyen de faire un pseudo CTE sous Access, j'ai convertis la solution de @StringBuilder grâce à des requête enregistré dans ma BDD Access.
    Par pitié !!!! :Si vous ne savez pas faire cliquez ici !
    Citation Envoyé par Marc-L
    C'est dommage que parfois tu sois aussi lourd que tu as l'air intelligent…

  12. #12
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 126
    Points : 38 509
    Points
    38 509
    Billets dans le blog
    9
    Par défaut
    sinon il suffit d'imbriquer les requetes : select .... from (select ....)

  13. #13
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut
    L'avantage des requêtes enregistrés est la réutilisabilitée
    Par pitié !!!! :Si vous ne savez pas faire cliquez ici !
    Citation Envoyé par Marc-L
    C'est dommage que parfois tu sois aussi lourd que tu as l'air intelligent…

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL-5.6] Faire une requête sur deux tables pour avoir la valeur MAX sans le GROUP BY
    Par emykev22 dans le forum Requêtes
    Réponses: 1
    Dernier message: 04/06/2014, 12h12
  2. requêter sur 3 tables (pour le moment !)
    Par clonezoë dans le forum Requêtes et SQL.
    Réponses: 17
    Dernier message: 05/03/2009, 15h02
  3. Requête sur deux tables en même temps
    Par will89 dans le forum Requêtes
    Réponses: 2
    Dernier message: 20/04/2006, 11h01
  4. problème de requête SQL sur 3 tables pour un while
    Par carmen256 dans le forum Requêtes
    Réponses: 3
    Dernier message: 13/04/2006, 16h55
  5. Besoin d'aide pour requête sur grosse table
    Par Fabouney dans le forum Langage SQL
    Réponses: 3
    Dernier message: 25/01/2006, 09h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo