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 :

Intégrer une donnée comportant un 'replace' dans un 'group by'


Sujet :

MS SQL Server

  1. #1
    Membre actif
    Avatar de repié
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    335
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 335
    Points : 281
    Points
    281
    Par défaut Intégrer une donnée comportant un 'replace' dans un 'group by'
    bonjour

    voila, j'ai grossièrement une requete du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT REPLACE(RTRIM(MesDonnes), 'choix1' , choix2)
    FROM maTable
    GROUP BY REPLACE(RTRIM(MesDonnes), 'choix1' , choix2)
    or le regroupement ne fonctionne pas pour les valeurs affectés par 'REPLACE'

    Comment puis-je faire pour que le GROUP BY fonctionne correctement?

  2. #2
    Expert confirmé
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Points : 4 043
    Points
    4 043
    Par défaut
    Bonjour,

    Quel est le problème exactement ? Ceci fonctionne :
    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
     
    CREATE TABLE #tmp (nb int, txt varchar(20))
     
    INSERT INTO #tmp VALUES (1, 'un')
    INSERT INTO #tmp VALUES (1, 'deux')
    INSERT INTO #tmp VALUES (1, 'trois')
    INSERT INTO #tmp VALUES (1, 'quatre')
    INSERT INTO #tmp VALUES (1, 'cinq')
    INSERT INTO #tmp VALUES (1, 'six')
    INSERT INTO #tmp VALUES (1, 'sept')
    INSERT INTO #tmp VALUES (1, 'huit')
     
    SELECT COUNT(nb) as cnt, REPLACE(RTRIM(txt), 'quatre' , 'cinq')
    FROM #tmp
    GROUP BY REPLACE(RTRIM(txt), 'quatre' , 'cinq')
    GO
     
    DROP TABLE #tmp

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 114
    Points : 102
    Points
    102
    Par défaut
    sinon


    SELECT REPLACE(RTRIM(MesDonnes), 'choix1' , choix2) as toto
    FROM maTable
    GROUP BY toto

  4. #4
    Membre actif
    Avatar de repié
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    335
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 335
    Points : 281
    Points
    281
    Par défaut
    Malheureusement ce code est refusé (Motif "Invalid column name") :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT REPLACE(RTRIM(MesDonnes), 'choix1' , choix2) as toto
    FROM maTable
    GROUP BY toto
    Je vais clarifier ma requete parce que certeines chose qui n'auraient pas du être oubliés ont été mis de coté hier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT REPLACE(RTRIM(MaDonnee), 'choix1' , choix2) 'MaColonne',
    UneAutreDonnees SUM(UnTotal)
    FROM maTable GROUP BY REPLACE(RTRIM(MaDonnee), 'choix1' , choix2) HAVING SUM(UnTotal) <> 0
    Voila, tout est là
    La requete ne génére pas d'erreur mais les lignes concernées par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    REPLACE(RTRIM(MaDonnee), 'choix1' , choix2)
    ont disparus...

    Merci beaucoup de votre coup de main!

  5. #5
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Points : 4 414
    Points
    4 414
    Par défaut
    Vous devez poster le code tel que vous l'utiliser chez vous.

  6. #6
    Membre actif
    Avatar de repié
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    335
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 335
    Points : 281
    Points
    281
    Par défaut
    ce code est celui que j'utilise actuelement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT REPLACE(RTRIM(MaDonnee), 'choix1' , choix2) 'MaColonne',
    UneAutreDonnees,
    SUM(UnTotal)
    FROM maTable
    GROUP BY REPLACE(RTRIM(MaDonnee), 'choix1' , choix2)
    HAVING SUM(UnTotal) <> 0
    Je préfère garder les nom exactes des tables et colonnes de cotés, professionnelement oblige...

  7. #7
    Expert confirmé
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Points : 4 043
    Points
    4 043
    Par défaut
    Tu peux garder le nom de colonnes secret, mais la syntaxe que tu postes est-elle exactement semblable à l'originale ? Il y a plusieurs problèmes :

    - le troisième paramètre du REPLACE doit être un string ou un binary, ici tu donnes le nom d'une colonne (il n'y a pas de délimiteur de string)
    - UneAutreDonnees est dans le SELECT mais pas dans le GROUP BY : syntaxe incorrecte.

    Pour Telynor : la syntaxe que tu proposes ne peut pas fonctionner : tu ne peux pas utiliser ton alias dans le GROUP BY, cette partie de la requête est évaluée avant le SELECT.

  8. #8
    Membre actif
    Avatar de repié
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    335
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 335
    Points : 281
    Points
    281
    Par défaut
    C'est exact autant pour moi, ces erreur sont apparu lors de ma saisie sur le forum

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT REPLACE(RTRIM(MaDonnee), 'choix1' , 'choix2') 'MaColonne',
    UneAutreDonnees,
    SUM(UnTotal)
    FROM maTable
    GROUP BY REPLACE(RTRIM(MaDonnee), 'choix1' , 'choix2'), 
    UneAutreDonnees
    HAVING SUM(UnTotal) <> 0
    Mais mis à part ces erreurs de syntaxe, mon problème ne vient-t-il pas de la structure de la requete même?

    Si c'est pas ca, alors je sais pas comment faire

  9. #9
    Expert confirmé
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Points : 4 043
    Points
    4 043
    Par défaut
    Ok, merci. Cette syntaxe me paraît correcte. Comment sais-tu que tu n'obtiens pas les résultats désirés ? Tu vois des regroupements par les données avant REPLACE ? es-tu sûr qu'il n'y a pas d'erreur dans le contenu des paramètres du replace. Comme tu peux le tester avec le code que j'ai posté plus haut, le replace dans le GROUP BY marche pour moi sans problème.

  10. #10
    Membre actif
    Avatar de repié
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    335
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 335
    Points : 281
    Points
    281
    Par défaut
    C'est bon, je viens de reprendre toutes les idées de la discussion et j'i trouvé ma solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT REPLACE(RTRIM(MaDonnee), 'choix1' , 'choix2') 'MaColonne',
    UneAutreDonnees,
    SUM(UnTotal)
    FROM maTable
    GROUP BY MaDonnee, 
    UneAutreDonnees
    HAVING SUM(UnTotal) <> 0
    j'avoue que je ne sais pas pourquoi ca n'a pas marché la 1ere fois mais bon, je retombe sur mes pattes donc c'est génial

    Merci à tous pour votre coup de main!

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 20/01/2012, 17h05
  2. Intégrer les données de plusieurs fichiers dans une table
    Par soad029 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 25/11/2007, 04h57
  3. Réponses: 1
    Dernier message: 26/09/2007, 18h16
  4. Réponses: 14
    Dernier message: 22/05/2007, 01h32
  5. Réponses: 7
    Dernier message: 11/01/2007, 19h54

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