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 :

tables croisees pour MSQ SQL


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Inscrit en
    Novembre 2005
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 7
    Par défaut [RESOLU] tables croisees pour MSQ SQL
    Bonjour

    J'essaye de remplir une table avec les donnees de 2 autres
    Table Info ce sont des colonnes
    Table Item ce sont des lignes

    Table 1 --> Info
    InfoID
    Name

    Table 2 --> Item
    InfoID
    Num
    Value

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    TRANSFORM Max(Item.Value) AS MaxValue
    SELECT Info.Name
    FROM Info INNER JOIN Item ON Info.InfoID = Item.InfoID
    WHERE Item.Num In (10,12,15,100)
    GROUP BY Info.Name
    PIVOT Item.Num

    dans access ca marche exactement comme je veux j'obtiens bien 5 colonnes --> Name,10,12,15,100


    mais le meme code dans MS SQL Marche pas
    j'ai la meme structure de table dans les 2 cas

    quelqu'un saurait me traduire ca (la partie en code) pour MS SQL 2000 ?

    merci 1000000 fois !

  2. #2
    Membre du Club
    Inscrit en
    Novembre 2005
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 7
    Par défaut
    j'ai esaye ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT  Info.Name
    ,(CASE WHEN Item.Num = 10 THEN Item.value END) AS A
    ,(CASE WHEN Item.Num = 12 THEN Item.value END) AS B
    ,(CASE WHEN Item.Num = 15 THEN Item.value END) AS C
    ,(CASE WHEN Item.Num = 100 THEN Item.value END) AS D
    FROM Info INNER JOIN Item ON Info.InfoID = Item.InfoID
    mais je dois obtenir 1 ligne a 5 colonnes
    or j'ai 100 lignes !

    si j'ajoute GROUP BY Info.Name ca plante


    une idee ?

    merci

  3. #3
    Membre éprouvé
    Avatar de TheLeadingEdge
    Inscrit en
    Mai 2005
    Messages
    1 199
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 1 199
    Par défaut
    Bonjour,

    Normal, si tu fais 1 GROUP BY il faut que tu 'groupe' tes lignes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT 	name,
    	SUM (CASE WHEN num = 10 THEN value ELSE 0 END) as num10,
    	SUM (CASE WHEN num = 12 THEN value ELSE 0 END) as num12,
    	SUM (CASE WHEN num = 15 THEN value ELSE 0 END) as num15,
    	SUM (CASE WHEN num = 100 THEN value ELSE 0 END) as num100
    FROM	item
    INNER JOIN info
    ON 	item.infoId = info.infoId
    GROUP BY name
    ORDER BY name;
    A +

    PS : tu m'as grillé, c la soluce que j'allais te proposer

    PS 2 : y'a des coups ou MS fait tres fort ds la regression. C'est pourtant bien utile PIVOT.

  4. #4
    Membre du Club
    Inscrit en
    Novembre 2005
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 7
    Par défaut
    non ca marche pas je ramene 752 lignes au lieu d'une
    ton code au niveau du group by est le meme que le mien ? je vois pas la diff

    et la je veux pas
    SUM (CASE WHEN num = 10 THEN value ELSE 0 END) as num10,

    mais
    ,(CASE WHEN Item.Num = 10 THEN Item.value END) AS A

    si le num= 10 je veux la Value as A
    si le num = 20 je veux la value as B

    ya pas de SUM c'est de toute facon un string


    et le group by marche pas ca plante ou alors faut tout mettre en group by et je ramene toujours 752 lignes
    avec PIVOT dans access 2003 ca marche d'enfer cest exactement le resultat souhaite

  5. #5
    Membre du Club
    Inscrit en
    Novembre 2005
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 7
    Par défaut
    dans le cas ci dessus ::

    Info

    InfoID | Name
    ...............
    1 | jean
    2| Pierre

    ----------------------------------------

    Item

    InfoID | Num | Value
    ....................
    1 | 400 | 1_400
    1 | 10 | 1_10
    1 | 15 | 1_15
    1 | 12 | 1_12
    1 | 100 | 1_100
    1 | 40 | 1_40
    2 | 400 | 2_400
    2 | 10 | 2_10
    2 | 15 | 2_15
    2 | 12 | 2_12
    2 | 100 | 2_100
    2 | 40 | 2_40

    je dois obtenir ::


    Name | A | B | C | D
    .....................
    Jean | 1_10 | 1_12 | 1_15 | 1_100
    Pierre | 2_10 | 2_12 | 2_15 | 2_100

  6. #6
    Membre éprouvé
    Avatar de TheLeadingEdge
    Inscrit en
    Mai 2005
    Messages
    1 199
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 1 199
    Par défaut
    Re,

    Citation Envoyé par anselmeJ
    je veux pas
    SUM (CASE WHEN num = 10 THEN value ELSE 0 END) as num10,
    mais
    ,(CASE WHEN Item.Num = 10 THEN Item.value END) AS A
    Tu es obligé de grouper tes lignes. Mais tu peux bien sur utiliser remplacer SUM par MAX qui convient tout à fait à ce que tu veux faire.
    J'ai fait 1 test avec ton jeu d'essai et ça semble coller.

    Msg 156, Niveau 15, État 1, Serveur CAY-WEST, Procédure , Ligne 1
    [Microsoft][ODBC SQL Server Driver][SQL Server]Syntaxe incorrecte vers le mot clé 'FROM'.
    1> SELECT name,
    2> MAX (CASE WHEN num = 10 THEN value ELSE NULL END) as num10,
    3> MAX (CASE WHEN num = 12 THEN value ELSE NULL END) as num12,
    4> MAX (CASE WHEN num = 15 THEN value ELSE NULL END) as num15,
    5> MAX (CASE WHEN num = 100 THEN value ELSE NULL END) as num100
    6> FROM item
    7> INNER JOIN info
    8> ON item.infoId = info.infoId
    9> GROUP BY name
    10> ORDER BY name;
    11> go
    name num10 num12 num15 num100
    -------------------------------------------------- ------------ ------------ ------------ ------------
    Jean 1_10 1_12 1_15 1_100
    Pierre 2_10 2_12 2_15 2_100
    Avertissement : Les valeurs nulles ont été éliminées de l'agrégat.

    (2 lignes affectées)
    A +

  7. #7
    Membre du Club
    Inscrit en
    Novembre 2005
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 7
    Par défaut
    j'y crois pas !!!!
    ca maaaaaaaaaaaaaaaaaarche

    c'est le MAX que j'avais pas mis

    merci enorme !

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

Discussions similaires

  1. Réponses: 18
    Dernier message: 30/01/2012, 18h41
  2. Requête SQL dans la table utilisée pour l'état
    Par phil_klb dans le forum IHM
    Réponses: 1
    Dernier message: 22/07/2009, 20h31
  3. Réponses: 1
    Dernier message: 22/01/2009, 16h48
  4. Réponses: 3
    Dernier message: 28/08/2006, 16h14
  5. Taille Maxi pour un SQL SERVEUR 2000
    Par WOLO Laurent dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 21/07/2003, 09h37

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