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

Développement SQL Server Discussion :

SQL multi-tables [stage]


Sujet :

Développement SQL Server

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 19
    Par défaut SQL multi-tables [stage]
    Bonjour, je suis actuellement en stage et j'ai toute une base de donnée sur des archives de l'entreprises ou je suis a refaire. J'ai tout importé d'Excel a Access comme on m'a demandé, et j'ai fait une table par année (sa va de 1995 a 2010).

    Dans chaque table, j'ai un champ ID, NumAffaire, Client, NumCd, Observations.
    On m'a demandé de faire une requete pour afficher les numeros d'affaires.
    J'ai lié chaque table entre elles, enfin ID de 1995 avec comme clé etrangere NumCd de 1996. ID de 1996 avec NumCd 1997 ainsi de suite.

    ID est clé primaire dans chaque table.

    Et vu que j'ai pris option reseau, je suis assez mauvais en sql... mais j'ai besoin de passé par la pour ensuite continuer ce projet qu'on m'a confié.

    J'avais debuté avec ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT NumAffaire
    FROM 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010;
    WHERE 1995.ID=1996.NumCd
    AND 1996.ID=1997.NumCd
    AND 1997.ID=1998.NumCd
    etc...

    J'ai des erreurs sur NumAffaire comme quoi il apparait dans plusieurs tables.

    J'ai essayé avec 2 tables et meme la sa ne marche pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT NumAffaire
    FROM 1995, 1996
    WHERE 1995.ID=1996.NumCd
    sa me met erreur de syntaxe dans le WHERE et me surligne ID.

    Il n'y a qu'en faisant des requêtes années par années que sa marche, mais je doute que ce soit super simplifié, surtout pour une entreprise qui veut un truc impeccable, facile, et qui regroupe tout d'un coup.

    Si vous pouviez m'aidez

  2. #2
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 19
    Par défaut
    J'ai retesté quelque chose et c'est deja mieux.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT [2000].NumAffaire
    FROM (((((((((((((((1995 INNER JOIN 1996 ON [1995].ID = [1996].ID) INNER JOIN 1997 ON [1996].ID = [1997].ID) INNER JOIN 1998 ON [1997].ID = [1998].ID) INNER JOIN 1999 ON [1998].ID = [1999].ID) INNER JOIN 2000 ON [1999].ID = [2000].ID) INNER JOIN 2001 ON [2000].ID = [2001].ID) INNER JOIN 2002 ON [2001].ID = [2002].ID) INNER JOIN 2003 ON [2002].ID = [2003].ID) INNER JOIN 2004 ON [2003].ID = [2004].ID) INNER JOIN 2005 ON [2004].ID = [2005].ID) INNER JOIN 2006 ON [2005].ID = [2006].ID) INNER JOIN 2007 ON [2006].ID = [2007].ID) INNER JOIN 2008 ON [2007].ID = [2008].ID) INNER JOIN 2009 ON [2008].ID = [2009].ID) INNER JOIN 2010 ON [2009].ID = [2010].ID) INNER JOIN PDS ON [2010].ID = PDS.ID;
    Je peux afficher les numeros d'affaires, en precisant bien l'année. Mais je n'arrive toujours pas a afficher tout les numeros d'affaires de toutes les années. Et c'est dans le SELECT que cela ne va pas, mais je ne sais pas quoi essayer.

  3. #3
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 827
    Par défaut
    Bonjour,

    C'est mieux mais c'est illisible

    Mais je n'arrive toujours pas a afficher tout les numeros d'affaires de toutes les années. Et c'est dans le SELECT que cela ne va pas, mais je ne sais pas quoi essayer.
    Étant donné que la colonne NumAffaire apparaît dans toutes les tables que vous interrogez, SQL Server ne sait pas laquelle il doit retourner.
    Il vous faut donc préciser quelle colonne de quelle table vous souhaitez afficher.

    Pour ma part je doute que les lignes que vous avez dans la table d'une année n soient référencées dans les lignes de la table dont l'année est n+1.

    En plus de cela il aurait mieux valu tout stocker dans la même table en ajoutant l'année dans une colonne, quitte à partitionner la table par année.
    Ou alors, créer une vue fédérée sur toutes ces tables, avec les contraintes CHECK qui vont bien.

    Pour le moment, voici la requête :

    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
    SELECT	1995 AS Annee
    		, NumAffaire
    	FROM	dbo.1995
    UNION ALL
    	SELECT	1996
    		, NumAffaire
    	FROM	dbo.1996
    UNION ALL
    	SELECT	1997
    		, NumAffaire
    	FROM	dbo.1997
    UNION ALL
    	SELECT	1998
    		, NumAffaire
    	FROM	dbo.1998
    UNION ALL
    	SELECT	1999
    		, NumAffaire
    	FROM	dbo.1999
    UNION ALL
    	SELECT	2000
    		, NumAffaire
    	FROM	dbo.2000
    UNION ALL
    	SELECT	2001
    		, NumAffaire
    	FROM	dbo.2001
    UNION ALL
    	SELECT	2002
    		, NumAffaire
    	FROM	dbo.2002
    UNION ALL
    	SELECT	2003
    		, NumAffaire
    	FROM	dbo.2003
    UNION ALL
    	SELECT	2004
    		, NumAffaire
    	FROM	dbo.2004
    UNION ALL
    	SELECT	2005
    		, NumAffaire
    	FROM	dbo.2005
    UNION ALL
    	SELECT	2006
    		, NumAffaire
    	FROM	dbo.2006
    UNION ALL
    	SELECT	2007
    		, NumAffaire
    	FROM	dbo.2007
    UNION ALL
    	SELECT	2008
    		, NumAffaire
    	FROM	dbo.2008
    UNION ALL
    	SELECT	2009
    		, NumAffaire
    	FROM	dbo.2009
    UNION ALL
    	SELECT	2010
    		, NumAffaire
    	FROM	dbo.2010
    Cela dit, je ne comprend pas pourquoi vous avez besoin de retourner 15 ans d'activité de votre entreprise. Il semblerait plus judicieux de faire choisir au client une date de début et de fin pour la recherche. il y a en effet de grandes chances pour que seules les caractéristiques des dernières affaires soient consultées

    @++

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 19
    Par défaut
    Citation Envoyé par elsuket Voir le message
    En plus de cela il aurait mieux valu tout stocker dans la même table en ajoutant l'année dans une colonne, quitte à partitionner la table par année.
    Ou alors, créer une vue fédérée sur toutes ces tables, avec les contraintes CHECK qui vont bien.
    J'ai hésité a faire ça justement ^^ J'ai continuer a faire ce que je faisais dans mon 2e poste en retapant pour chaque année et au final sa me donne une feuille de donnée reprenant tout les numeros d'affaires de ces 15 ans.
    Alors c'est toujours fouilli et brouillon, mais moins qu'avant. Donc a voir si je continue.

    En plus, n'ayant pas été tres loin en SQL, je n'avais pas connaissance des UNION et CHECK

    Cela dit, je ne comprend pas pourquoi vous avez besoin de retourner 15 ans d'activité de votre entreprise. Il semblerait plus judicieux de faire choisir au client une date de début et de fin pour la recherche. il y a en effet de grandes chances pour que seules les caractéristiques des dernières affaires soient consultées
    C'est clair qu'ils ne vont pas rechercher des affaires de 1995. Mais je ne suis que stagiaire, ils en profitent pour tout refaire au propre

  5. #5
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 827
    Par défaut
    Mais je ne suis que stagiaire, ils en profitent pour tout refaire au propre
    Pour avoir fait deux stages après mes études, ça me rappelle quelque chose

    N'hésitez pas à poster

    @++

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 19
    Par défaut
    Re bonjour,

    J'ai decidé de tout regroupé dans une meme table comme vous m'avez conseillé. Mais je ne sais pas comment m'y prendre avec les champs.

    Je fais une table avec ces champs là :

    Année - NumAffaire - Client - NumCd - Observations

    ou une table comme ceci :

    Année 1995 - NumAffaire 1995 - Client 1995 - NumCd 1995 - Observations

    ___

    La deuxieme solution me parait un peu trop compliqué, surtout que suite a ça je dois faire une interface avec VB pour retrouver un numero d'affaire et aussi rentrer de nouvelle affaires ?

    Quelle table me conseillez vous ?

  7. #7
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 827
    Par défaut
    La première sans aucune hésitation
    Vous avez raison : la seconde vous mènera a écrire du code spaghetti, difficilement maintenable et surtout peu performant.

    Ne mettez pas d'accent dans le nom des colonnes, ni même d'autres caractères cabalistiques

    Si vous stockez l'année, alors il n'y a plus besoin de "séparer" les numéros d'affaire, de client, ... par année ... à moins que ces données ne soient pas "persistantes", c'est à dire que les numéros d'affaire changent d'année en année pour la même affaire, et de même pour le numéro de client (et là c'est beaucoup plus grave )

    @++

  8. #8
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 19
    Par défaut
    J'ai opté pour la premiere , ce fut long a tout rentrer mais c'est enfin fini. Ma table affiche bien tout correctement, et je suis passé de suite a l'interface a faire sur Vb.

    D'ailleurs ou poster pour du code en visual basic ? j'ai quelques soucis aussi par la. Et c'est dans la suite de mon projet de stage.

    J'arrive a remplir le datagrid des données de ma table au chargement du formulaire, mais quand je veux faire une recherche par Numero d'affaire, par n° de CD, d'année ou de client, sa ne fonctionne pas.

    Je me rappelle avoir eu ce probleme en cours, mais je n'arrive pas a me souvenir comment j'ai fait

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

Discussions similaires

  1. Requête SQL multi table / exists
    Par DeWaRs dans le forum Langage SQL
    Réponses: 6
    Dernier message: 11/03/2013, 13h14
  2. Réponses: 1
    Dernier message: 10/07/2012, 15h10
  3. Requete SQL multi tables
    Par csilas dans le forum VB 6 et antérieur
    Réponses: 15
    Dernier message: 28/01/2010, 15h05
  4. [Debutant] Requête SQL Multi-Tables
    Par Superbretzel dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 16/02/2008, 11h47
  5. UPDATE multi-tables sous SQL Server
    Par Cybernet dans le forum Langage SQL
    Réponses: 8
    Dernier message: 25/03/2004, 15h34

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