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 :

[Débutant] sous requete à valeurs multiples [Fait]


Sujet :

Langage SQL

  1. #21
    Membre régulier
    Inscrit en
    Septembre 2007
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 63
    Points : 71
    Points
    71
    Par défaut
    bon ben derniere solution

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT VEH.num_interne, OPT.description
    FROM tablevehicule as VEH, tableoption as OPT
    WHERE VEH.num_interne = OPT.num_interne 
    AND EXISTS (
    SELECT OPT2.code FROM tableoption as OPT2 
    WHERE OPT2.num_interne = OPT.num_interne 
    AND OPT2.code  = OPT.code 
    )

  2. #22
    Nouveau Candidat au Club
    Inscrit en
    Novembre 2007
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 16
    Points : 1
    Points
    1
    Par défaut
    desolé mais toujours le meme message !!!

    Heureusement qu'un modo m'a dit que c'etait super simple

    regarde le reste de la requete LUX 08 peut etre cela va t'aider en tout cas un grand merci !!

  3. #23
    Membre régulier
    Inscrit en
    Septembre 2007
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 63
    Points : 71
    Points
    71
    Par défaut
    vue sous cet angle

    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
     
    SELECT LTRIM(RTRIM(TGPTOVENTA.DESCRIPCORTO)) AS 'Soc/Lieu',
           TCVEH.NUMSTOCK AS 'No Stock',
           (CAST(CONVERT(CHAR(12), '1-1-2050', 103) AS DATETIME) -
           CONVERT(CHAR(12), TCVEH.FECCOMPRA, 103)) AS 'Nb Jrs de Stock',
           TCVEH.VENDEDORRECOMPRA AS 'Acheteur',
           (SELECT TGMARCA.DESCRIP
              FROM TGMARCA
             WHERE TGMARCA.MARCA = TCVEH.MARCA) AS 'Marque',
           (SELECT LTRIM(RTRIM(TGVERSION.DESCRIP))
              FROM TGVERSION
             WHERE TGVERSION.MARCA = TCVEH.MARCA
               AND TGVERSION.MODELO = TCVEH.MODELO
               AND TGVERSION.VERSION = TCVEH.VERSION) AS 'Modele/Version',
           REPLACE(TCVEH.COMBUSTIBLE, 'NULL', '') AS 'Energie',
           CONVERT(CHAR(12), TCVEH.FECMATRICPRIMERA, 103) AS 'Date Mec',
           TCVEH.KM AS 'Kms',
           (SELECT SUM(COMPRAPRECIO * CDAD)
              FROM TCVEHOPCION
             WHERE TCVEHOPCION.EMP = TCVEH.EMP
               AND TCVEHOPCION.NUMINTERNO = TCVEH.NUMINTERNO
               AND TCVEHOPCION.TIPOLINEA = 'A') AS "Tot Achat",
           (SELECT RTRIM(LTRIM(TCCOLOR.DESCRIP))
              FROM TCCOLOR
             WHERE TCCOLOR.MARCA = TCVEH.MARCA
               AND TCCOLOR.COLOR = TCVEH.COLOR) AS 'Couleur',
           REPLACE(TCVEH.POTENCIAFISCAL, 'NULL', '') AS 'Pu Fisc',
           LTRIM(RTRIM(REPLACE(TCVEH.MATRIC, 'NULL', ''))) AS 'Immat',
           TCVEH.AUTCIRCULACION AS 'Type Mine',
           TCVEH.CHASIS AS 'N° Chassis',
           (SELECT TCVODESTINO.DESCRIP
              FROM TCVODESTINO
             WHERE TCVODESTINO.CODIGO = TCVEH.VODESTINO) AS 'Destination VO',
     
           --'Vendu' = CASE tcVeh.Status WHEN  30 THEN 'OUI' ELSE 'NON' END,
           CASE TCVEH.RESERVADO
             WHEN 1 THEN
              'OUI'
             ELSE
              'NON'
           END AS 'Reservé',
     
           CASE
             WHEN TCVEH.REBU <> 1 THEN
              TCVEHOPCION.VENTAPRECIO *
              (1 + ((SELECT PORCEN
                       FROM TGIVAPOR
                      WHERE TCVEHOPCION.IVAVENTA = TGIVAPOR.CODIGO) / 100))
             ELSE
              TCVEHOPCION.VENTAPRECIO
           END TCVEHOPCIONGENERIC.DESCRIP AS 'Option',
     
           REPLACE(REPLACE(REPLACE(TCVEH.OBSER, CHAR(13), ''), CHAR(10), ''),
                   CHAR(9),
                   ' ') AS 'Remarque'
     
      FROM TCVEH, TGEMPRESA, TGPTOVENTA, TCVEHOPCION, TCVEHOPCIONGENERIC
     
    >>> WHERE VEH.NUM_INTERNE = OPT.NUM_INTERNE
       AND EXISTS
     (SELECT OPT2.CODE
              FROM TCVEHOPCIONGENERIC AS OPT2
             WHERE OPT2.NUM_INTERNE = OPT.NUM_INTERNE
               AND OPT2.CODE = OPT.CODE) <<<
       AND TCVEHOPCION.TIPOLINEA = 'A'
       AND TCVEH.EMP = TCVEHOPCION.EMP
       AND TCVEH.NUMINTERNO = TCVEHOPCION.NUMINTERNO
       AND TGEMPRESA.EMP = TCVEH.EMP
       AND TGPTOVENTA.PUNTOVENTA = TCVEH.PUNTOVENTA
          --AND ((tcveh.baja = 0) or (tcveh.baja is null))
       AND (((TCVEH.BAJA = 0) OR (TCVEH.BAJA IS NULL)) OR
           (CAST(CONVERT(CHAR(12), TCVEH.BAJAFEC, 103) AS DATETIME) <=
           CAST(CONVERT(CHAR(12), '1-1-2050', 103) AS DATETIME)))
    en y réfléchissant... essais ca... regarde la partie entre >>> <<< pour ajuster avec les bons noms

  4. #24
    Nouveau Candidat au Club
    Inscrit en
    Novembre 2007
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 16
    Points : 1
    Points
    1
    Par défaut
    TCVEHOPCIONGENERIC.DESCRIP AS 'Option'

    ca j'avais deja essayer au tout début mais ca ne donctionne pas

  5. #25
    Membre émérite

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Points : 2 579
    Points
    2 579
    Par défaut
    Citation Envoyé par laurent26_llf Voir le message
    j'ai re-controlé et re-saisie le meme message d'erreur apparait :

    Microsoft ODBC SQL Server Driver SQL Server Une seule expression
    peut être spécifiée dans la liste de sélection quand la
    sous-requête n'est pas introduite par EXISTS

    Je rajoute le résultat escompté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Resultat
     
    num_interne       Option    Option     Option
       3184          Boite auto  Rasio laser  ABS
       3185
    Le résultat escompté utilise SQL pour de la mise en forme de résultats. SQL n'est pas fait pour ça. Penchez vous sur une requête qui renverrait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    num_interne       Option
       3184           Boite auto
       3184           Rasio laser
       3184               ABS   
       3185
    Il y a une jointure à faire et la solution (à une petite erreur prêt) a été donnée en première page. Votre erreur est due, je pense, au fait que les colonne demandées sont définie par un * qui est invalide lorsque plusieurs tables sont mises en jeu avec des jointures. Reprenez là en utilisant des colonnes explicites préfixées par leur table d'origine.

    C'est tout ce qu'il faut, pas plus.

  6. #26
    Nouveau Candidat au Club
    Inscrit en
    Novembre 2007
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 16
    Points : 1
    Points
    1
    Par défaut
    Non la premiere requete ne fonctionne pas meme avec des colonnes explicites j'avais deja essayé mais je viens de refaire l'essai au cas ou et non j'ai toujours le meme message d'erreur

  7. #27
    Membre émérite

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Points : 2 579
    Points
    2 579
    Par défaut
    Je persiste et signe. Une requête avec une simple jointure le jeu de résultat que j'ai mentionné plus haut.

    Vous n'arrivez à adapter/comprendre ce qu'on vous a proposé ou vous expliquez mal votre problème. Vu le peu d'informations que vous fournissez pour qu'on vous aide, je penche pour la 2eme option. De toute façon, vous êtes fautif alors arrêtez de renvoyer la balle aux personnes essayant de vous aider avec les pauvres informations que vous fournissez pour cela.

  8. #28
    Nouveau Candidat au Club
    Inscrit en
    Novembre 2007
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 16
    Points : 1
    Points
    1
    Par défaut
    Ce n'est pas la peine de s'enerver pour si peu de chose les infos sont la j'ai meme mis la requete entiere dans laquelle viens s'intercaller celle ci. J'ai juste changer le nom des tables car elles sont en espagnol.
    Le résultat que vous exprimez ne correspond pas au reste de la requete car celle ci génére un tableau excel sous le format :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    num_interne  société  marque  version              km  N° serie  energie  couleur  ....     OPTION    OPTION     OPTION
    3184         LORIENT  OPEL     ZAFIRA 1.9 COSMO  11500  WOLO54T456  DIESEL BLEU          Boite auto  Rasio laser  ABS
    3185         VANNES   FIAT     DOBLO 1.6 16v      85000  RTJI45866  ESS    ROUGE          Barre toit   Clim       Att rem
    Il est vrai que j'ai pas précisé ce détail peut etre important toujours est il que je n'accuse personne loin de moi cette idée !!!
    Je cherche de l'aide c'est tout (je faisait juste remarquer qu'un modo m'a dit de lire un tutorial en me disant que c'etait super simple alors qu'en fait ca à l'air plus compliqué que cela)
    merci en tout cas pour votre participation

  9. #29
    Membre émérite

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Points : 2 579
    Points
    2 579
    Par défaut
    Quel que soit le reste de la requête, la solution pour obtenir les options par véhicule a été donnée. Vous ne pouvez pas dire le contraire.

    D'autre part, j'ai déjà mentionné le fait que vous essayez d'utiliser SQL pour formatter des données (en essayant de mettre les options en colonne). Ce n'est pas un problème de complexité de requête.

    Vous devez générez votre export vers excel avec un langage de programmation ou un outil du reporting qui effectuera ce travail de formattage.

    Vous n'arriverez à rien avec SQL si vous persistez à vouloir sortir les données formattées. Et même si vous arrivez à quelquechose, ce sera une mauvaise solution car peu maintenable, peu évolutive et donc source de problème.


    Utilisez SQL pour sortir les données dont vous avez besoin puis utilisez un outil adapté pour générer votre fichier excel. Vous verrez que ce sera plus simple, plus logique et plus viable comme solution.

  10. #30
    Nouveau Candidat au Club
    Inscrit en
    Novembre 2007
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 16
    Points : 1
    Points
    1
    Par défaut
    Pourquoi alors dans ce cas toutes les autres requetes fonctionnent et pas celle ci ???

  11. #31
    Membre émérite

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Points : 2 579
    Points
    2 579
    Par défaut
    Citation Envoyé par laurent26_llf Voir le message
    Pourquoi alors dans ce cas toutes les autres requetes fonctionnent et pas celle ci ???
    Cf dit précédemment.

    Car vous l'avez mal adaptée et que les personnes qui vous ont aidé n'avez pas les informations nécessaires et suffisantes pour vous donner la requête directement utilisable pour votre SGBD, votre structure de données, ...

    Je répète que si vous avez les tables suivantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    - T_VEHICULE
    
    ID_VEHICULE
    LIBELLE_VEHICULE
    
    
    - T_VEHICULE_OPTION
    
    ID_OPTION
    LIBELLE_OPTION
    ID_VEHICULE
    La requête suivante vous donne les tuples vehicule/option associés :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT V.ID_VEHICULE, V.LIBELLE_VEHICULE, O.LIBELLE_OPTION
    FROM T_VEHICULE V 
    	LEFT JOIN T_VEHICULE_OPTION O 
    		ON O.ID_VEHICULE = V.ID_VEHICULE
    ORDER BY V.ID_VEHICULE

Discussions similaires

  1. Probleme de multiplication avec valeurs de sous requete
    Par fred_vannes56 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 21/05/2008, 14h34
  2. Réponses: 13
    Dernier message: 27/08/2007, 12h16
  3. [débutant] Affichage requetes et sous requetes
    Par max63_ dans le forum Access
    Réponses: 2
    Dernier message: 09/03/2006, 15h23
  4. Optimisation requete avec sous-requetes multiples
    Par gege.boubou dans le forum Requêtes
    Réponses: 3
    Dernier message: 08/09/2005, 10h42
  5. [Débutante]Sous requete
    Par mimi74 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 19/07/2004, 14h02

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