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

MS SQL Server Discussion :

[SQL2K] Besoin d'aide pour une requête


Sujet :

MS SQL Server

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 2
    Points : 2
    Points
    2
    Par défaut [SQL2K] Besoin d'aide pour une requête
    Bonjour! C'est mon premier post.. .

    Voici ma 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
     
    SELECT SUM(TM) AsTM, SUM(M3) AsM3, SUM(Fret) AsFret
    FROM
      (SELECT SUM(masse)*0.001 TM, SUM(cube) M3, SUM(masse)*0.001 Fret
      FROM manifcolis mc, manifrecus mr, voyages vo, contrats ct, compagnies ci
      WHERE mc.manifrecuid = mr.manifrecuid
      AND mc.voyaid = vo.voyaid
      AND mr.contid = ct.contid
      AND ct.cieid = ci.compid
      AND vo.voyano = '00606702'
      AND ci.compid = 1
      AND mr.origid = '1'
      AND mr.destid <> '1'
      AND masse >= cube * 400
     
      UNION
     
      SELECT SUM(masse)*0.001 TM, SUM(cube) M3, SUM(cube/2.5) Fret
      FROM manifcolis mc, manifrecus mr, voyages vo, contrats ct, compagnies ci
      WHERE mc.manifrecuid = mr.manifrecuid
      AND mc.voyaid = vo.voyaid
      AND mr.contid = ct.contid
      AND ct.cieid = ci.compid
      AND vo.voyano = '00606702'
      AND ci.compid = 1
      AND mr.origid = '1'
      AND mr.destid <> '1'
      AND masse < cube * 400) AsTMM3Fret
    Cette requête donne 3 colonnes (vous avez surement remarqué).

    Ce que je veux faire, c'est créer 4 requêtes comme celle-ci (qui me donnerait 12 colonnes (AsTM, AsM3, AsFret, LsTM, LsM3, LsFret, RsTM, RsM3, RsFret, TsTM, TsM3, TsFret)) en changeant les lignes "mr.origid = '1'" et "mr.destid <> '1'" et ce, en une seule requête.

    J'ai essayer avec UNION mais sa me donne un tableau de 4 lignes par 3 colonnes .

    Je sais pas si c'est assez clair, m'enfin faites moi signe sinon

    Merci de votre aide,

    Martin

  2. #2
    Membre à l'essai
    Inscrit en
    Mars 2006
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    ça fait longtemps que j'ai plus fait de sql mais si tu veux faire ça en une seule requete, je pense que ce n'est pas tres simple:
    La jointure de colonnes que tu veux faire, tu dois la faire dans ta premiere extraction et ta seconde extraction ;

    SELECT SUM(masse)*0.001 TM, SUM(cube) M3, SUM(masse)*0.001 Fret , xxx, yyy , zzz ...

    FROM ...


    plus clairement, tu dois extraire tes 12 colonnes dès ta premiere requete et y trouver l'ensemble des résultats que tu souhaite... Car sinon, c'est comme si tu voulais faire marche arrière ... je sais pas si je m'exprime clairement

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Bonjour!

    J'ai trouvé une façon mais le problème est que je fais une sommation donc si j'ai de l'information dans + de 1 groupe je dois diviser.

    Exemple: Si j'ai des données dans 1 groupe c'est ok, si c'est dans 2 groupes, je dois diviser par 2, si dans 3 groupes, je divise par 4 et si il y a des données dans les 4 groupes je dois diviser par 8.

    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
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
     
    SELECT
         SUM(aTM) ATM, SUM(aM3) AM3, SUM(aFret) AFret,
         SUM(lTM) LTM, SUM(lM3) LM3, SUM(lFret) LFret,
         SUM(rTM) RTM, SUM(rM3) RM3, SUM(rFret) RFret,
         SUM(tTM) TTM, SUM(tM3) TM3, SUM(tFret) TFret
    FROM
     
    -- ALLER --
     
      (SELECT SUM(masse)*0.001 aTM, SUM(cube) aM3, SUM(masse)*0.001 aFret
      FROM manifcolis mc, manifrecus mr, voyages vo, contrats ct, compagnies ci
      WHERE mc.manifrecuid = mr.manifrecuid
      AND mc.voyaid = vo.voyaid
      AND mr.contid = ct.contid
      AND ct.cieid = ci.compid
      AND vo.voyano = :voyano
      AND ci.compid = :compid
      AND mr.origid = '1'
      AND mr.destid <> '1'
      AND masse >= cube * 400
     
      UNION
     
      SELECT SUM(masse)*0.001 aTM, SUM(cube) aM3, SUM(cube/2.5) aFret
      FROM manifcolis mc, manifrecus mr, voyages vo, contrats ct, compagnies ci
      WHERE mc.manifrecuid = mr.manifrecuid
      AND mc.voyaid = vo.voyaid
      AND mr.contid = ct.contid
      AND ct.cieid = ci.compid
      AND vo.voyano = :voyano
      AND ci.compid = :compid
      AND mr.origid = '1'
      AND mr.destid <> '1'
      AND masse < cube * 400) AS ATMM3Fret,
     
    -- LATERAL --
     
      (SELECT SUM(masse)*0.001 lTM, SUM(cube) lM3, SUM(masse)*0.001 lFret
      FROM manifcolis mc, manifrecus mr, voyages vo, contrats ct, compagnies ci
      WHERE mc.manifrecuid = mr.manifrecuid
      AND mc.voyaid = vo.voyaid
      AND mr.contid = ct.contid
      AND ct.cieid = ci.compid
      AND vo.voyano = :voyano
      AND ci.compid = :compid
      AND mr.origid <> '1'
      AND mr.destid <> '1'
      AND masse >= cube * 400
     
      UNION
     
      SELECT SUM(masse)*0.001 lTM, SUM(cube) lM3, SUM(cube/2.5) lFret
      FROM manifcolis mc, manifrecus mr, voyages vo, contrats ct, compagnies ci
      WHERE mc.manifrecuid = mr.manifrecuid
      AND mc.voyaid = vo.voyaid
      AND mr.contid = ct.contid
      AND ct.cieid = ci.compid
      AND vo.voyano = :voyano
      AND ci.compid = :compid
      AND mr.origid <> '1'
      AND mr.destid <> '1'
      AND masse < cube * 400) AS LTMM3Fret,
     
    -- RETRO --
     
      (SELECT SUM(masse)*0.001 rTM, SUM(cube) rM3, SUM(masse)*0.001 rFret
      FROM manifcolis mc, manifrecus mr, voyages vo, contrats ct, compagnies ci
      WHERE mc.manifrecuid = mr.manifrecuid
      AND mc.voyaid = vo.voyaid
      AND mr.contid = ct.contid
      AND ct.cieid = ci.compid
      AND vo.voyano = :voyano
      AND ci.compid = :compid
      AND mr.origid <> '1'
      AND mr.destid = '1'
      AND masse >= cube * 400
     
      UNION
     
      SELECT SUM(masse)*0.001 rTM, SUM(cube) rM3, SUM(cube/2.5) rFret
      FROM manifcolis mc, manifrecus mr, voyages vo, contrats ct, compagnies ci
      WHERE mc.manifrecuid = mr.manifrecuid
      AND mc.voyaid = vo.voyaid
      AND mr.contid = ct.contid
      AND ct.cieid = ci.compid
      AND vo.voyano = :voyano
      AND ci.compid = :compid
      AND mr.origid <> '1'
      AND mr.destid = '1'
      AND masse < cube * 400) AS RTMM3Fret,
     
    -- TOTAL --
     
      (SELECT SUM(masse)*0.001 tTM, SUM(cube) tM3, SUM(masse)*0.001 tFret
      FROM manifcolis mc, manifrecus mr, voyages vo, contrats ct, compagnies ci
      WHERE mc.manifrecuid = mr.manifrecuid
      AND mc.voyaid = vo.voyaid
      AND mr.contid = ct.contid
      AND ct.cieid = ci.compid
      AND vo.voyano = :voyano
      AND ci.compid = :compid
      AND masse >= cube * 400
     
      UNION
     
      SELECT SUM(masse)*0.001 tTM, SUM(cube) tM3, SUM(cube/2.5) tFret
      FROM manifcolis mc, manifrecus mr, voyages vo, contrats ct, compagnies ci
      WHERE mc.manifrecuid = mr.manifrecuid
      AND mc.voyaid = vo.voyaid
      AND mr.contid = ct.contid
      AND ct.cieid = ci.compid
      AND vo.voyano = :voyano
      AND ci.compid = :compid
      AND masse < cube * 400) AS TTMM3Fret
    Merci devjav pour le hint

    Martin

  4. #4
    Membre à l'essai
    Inscrit en
    Mars 2006
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    No prob
    Je crois qu'il faut que tu place une image située en bas a gauche de la page pour indiquer que ton sujet est résolu, sans quoi d'autres essaieront encore de te repondre
    a++

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

Discussions similaires

  1. Besoin d'aide pour une requête de MAJ (modif. de car.)
    Par ptitscrat dans le forum Access
    Réponses: 5
    Dernier message: 22/03/2006, 17h27
  2. besoin d'aide pour une requête
    Par lipao17 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 04/01/2006, 16h55
  3. Besoin d'aide pour une requête SQL
    Par Borami dans le forum Langage SQL
    Réponses: 1
    Dernier message: 07/11/2005, 10h33
  4. Besoin d'aide pour une Requête SQL ...
    Par Kokito dans le forum Requêtes
    Réponses: 2
    Dernier message: 07/07/2004, 11h56
  5. besoin d'aide pour une requête
    Par Damien69 dans le forum Langage SQL
    Réponses: 11
    Dernier message: 31/03/2004, 15h38

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