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

Requêtes et SQL. Discussion :

Recuperation du complémentaire d'un ensemble


Sujet :

Requêtes et SQL.

  1. #1
    Membre régulier Avatar de Nono Sto
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 350
    Points : 74
    Points
    74
    Par défaut Recuperation du complémentaire d'un ensemble
    chères amies, chers amis

    Soit ma table Base qui se présente ainsi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Carto     DA
    1           Thomas Magnum
    2           Thomas Magnum
    3            
    4            
    5           Jonathan Higgins
    6           
    7            Terry Calvin
    8            
    9            Rick Wright
    J'ai une requête:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    TRANSFORM Reference AS Result
    SELECT Reference
    FROM (SELECT DISTINCT Base.DA AS Name, Base.Carto As Reference FROM Base WHERE Base.DA IS NOT NULL AND Base.Carto IS NOT NULL)
    GROUP BY Reference
    PIVOT Name;
    qui me donne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Reference  Thomas Magnum  Jonathan Higgins  Terry Calvin  Rick Wright
    1                       1
    2                       2
    3
    4
    5                                               5
    6
    7                                                                     7
    8
    9                                                                                      9

    Je souhaiterais modifier ma requête pour avoir le complémentaire càd:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Reference  Thomas Magnum  Jonathan Higgins  Terry Calvin  Rick Wright
    1                                               1                    1                 1
    2                                               2                    2                 2
    3                       3                       3                    3                3
    4                       4                       4                    4                4
    5                       5                                             5                5
    6                       6                        6                   6                6
    7                       7                        7                                     7
    8                       8                        8                    8                8
    9                       9                        9                    9
    Auriez vous une idées SVP ?

    Merci

  2. #2
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Pas très optimisé à cause du produit cartésien, mais ...

    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
    TRANSFORM 
    	First(PRESENT) AS RESULT
    SELECT 
    	Reference
    FROM
    	(
    		SELECT 
    			Reference,b1.DA as Nom ,
    			IIF(B1.Da=B2.Da, NULL, Reference) AS Present
    		FROM
    			(
    				SELECT DISTINCT 
    					DA 
    				FROM 
    					BASE 
    				WHERE 
    					DA IS NOT NULL
    			) b1 , 
    			(
    				SELECT 
    					Carto AS REFERENCE, 
    					DA  
    				FROM Base
    			) b2
    	)
     
    GROUP BY 
    	Reference
    PIVOT 
    	Nom
    Qui retourne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Reference	Jonhattan Higgins	Rick Wright	Terry Calvin	Thomas Magnum
    1	1	1	1	
    2	2	2	2	
    3	3	3	3	3
    4	4	4	4	4
    5		5	5	5
    6	6	6	6	6
    7	7	7		7
    8	8	8	8	8
    9	9		9	9

  3. #3
    Membre régulier Avatar de Nono Sto
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 350
    Points : 74
    Points
    74
    Par défaut
    Merci beaucoup cela marche nickel, j'ai modifier la requete pour la lancer d'une macro VBA XL, et pour eliminer les occurrence NULL dans la colonne Carto.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    "TRANSFORM First(Present) AS RESULT " _
         & "SELECT Reference FROM " _
         & "( " _
         & "SELECT Reference,[B1$].DA as Name, IIF([B1$].DA=[B2$].DA, NULL, Reference) AS Present FROM " _
         & "(SELECT DISTINCT DA FROM [Base$] WHERE DA IS NOT NULL AND Carto IS NOT NULL) [B1$], (SELECT Carto AS Reference, DA FROM [Base$] WHERE Carto IS NOT NULL) [B2$]" _
         & ") " _
         & "GROUP BY Reference " _
         & "PIVOT Name;"
    Cependant, avant de mettre le sujet résolu, je voudrais comprendre:
    Pas très optimisé à cause du produit cartésien
    Je suis néophyte en SQL, je ne comprend pas comment et ou intervient le produit dans ma requete, ici peut etre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "(SELECT DISTINCT DA FROM [Base$] WHERE DA IS NOT NULL AND Carto IS NOT NULL) [B1$], (SELECT Carto AS Reference, DA FROM [Base$] WHERE Carto IS NOT NULL) [B2$]"
    Merci

  4. #4
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Justement, dans la ligne de code que vous montrez (qui est la clause FROM), on a deux sous-requêtes B1 et B2 sans jointures. Cela recombine toutes les possibilités.

    Si dans B1 nous avons 100 lignes et 1000 dans B2, cela générera un ensemble de 100000 lignes.

    Si vraiment vous avez un gros volume de données, il sera préférable d'utiliser votre première requête (celle non complémentaire), de la verser dans une table et ensuite de faire une boucle en VBA pour calculer le complémentaire.

  5. #5
    Membre régulier Avatar de Nono Sto
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 350
    Points : 74
    Points
    74
    Par défaut
    Merci, je ne savais pas que l'on pouvait saturer des requêtes.

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

Discussions similaires

  1. Recuperer les valeurs d'un ensemble de checkbox
    Par Msysteme dans le forum ASP.NET
    Réponses: 4
    Dernier message: 24/12/2014, 14h42
  2. Recuperer l'ensemble des valeurs d'un formulaire
    Par johnson95 dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 26/08/2010, 15h38
  3. [PPT-2002] Lister et recuperer l'ensemble des coordonnees des formes d'une diapositive
    Par Kriss63 dans le forum VBA PowerPoint
    Réponses: 4
    Dernier message: 05/03/2010, 10h06
  4. [ProcStock][retour]recuperer ensemble d'enreg
    Par JohnGT dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 25/04/2003, 11h31

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