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 :

Requête avec ROW_NUMBER [2008]


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Analyste-Développeur BI
    Inscrit en
    Mai 2011
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-Développeur BI

    Informations forums :
    Inscription : Mai 2011
    Messages : 61
    Par défaut Requête avec ROW_NUMBER
    Bonjour,
    J'ai une requête qui me fait galérer depuis quelques temps alors je me dis que peut-être qu'un point de vue extérieur m'aidera à voir la petite erreur ^^
    Donc je voudrais dans une requête SELECT mettre un numéro d'ordre grâce à la ligne suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ltrim(rtrim(row_number() over(partition by substring(TABA.clefA,5,2) order by substring(TABB.clefB,1,5)-1),'0000'))
    De là, j'ai une erreur qui me dit : La fonction rtrim requiert 1 argument(s).

    Donc j'ai essayé de mettre les arguments du row-number en VARCHAR pour voir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ltrim(rtrim(convert(varchar,row_number() over(partition by substring(TABA.clefA,5,2) order by substring(TABB.clefB,1,5)-1),'0000')))
    Mais ce n'est apparemment pas le problème puisque j'ai l'erreur :
    Le type de données de l'argument varchar n'est pas valide pour l'argument 3 de la fonction convert.

    Du coup je vois plus trop, j'ai essayé de balader les parenthèses mais ça ne fonctionne toujours pas...
    Donc voilà, si quelqu'un voit ma bêtise, je vous remercie par avance pour votre aide!!!

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Bonjour,

    Vous passez deux arguments à la fonction RTRIM qui n'en n'attend qu'un.
    Le deuxième étant ,'0000', je ne comprend pas trop ce que vous avez voulu faire...
    Mais a priori votre erreur vient de là.

  3. #3
    Membre confirmé
    Femme Profil pro
    Analyste-Développeur BI
    Inscrit en
    Mai 2011
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-Développeur BI

    Informations forums :
    Inscription : Mai 2011
    Messages : 61
    Par défaut
    Tout d'abord merci pour la réponse rapide.

    Le '0000' me sert comme "cache" pour avoir un format de 4 chiffres (par exemple je veux avoir 0012 et non 12), mais c'est peut-être pas la bonne méthode...

    Au final je voudrais que cette requête me crée un champ Num_Ordre de la façon suivante : :
    Num_Ordre | TABA.clefA | TABB.clefB | ...
    0001 | 1 | 1 | ...
    0002 | 1 | 2 | ...
    0001 | 2 | 1 | ...
    0001 | 3 | 1 | ...
    0003 | 1 | 3 | ...
    0002 | 2 | 2 | ...

  4. #4
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Citation Envoyé par Tofidou Voir le message
    Le '0000' me sert comme "cache" pour avoir un format de 4 chiffres (par exemple je veux avoir 0012 et non 12), mais c'est peut-être pas la bonne méthode...
    Non, en effet !

    Vous avez mélangé RTRIM/LTRIM et RPAD/LPAD... mais ces derniers n'existent pas sous SQL Server.

    Procédez par étape en générant d'abord vos nombres, puis complétez avec les 0 manquants dans un second temps. Pour cela, vous pouvez vous inspirer de cette discussion

  5. #5
    Membre confirmé
    Femme Profil pro
    Analyste-Développeur BI
    Inscrit en
    Mai 2011
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-Développeur BI

    Informations forums :
    Inscription : Mai 2011
    Messages : 61
    Par défaut
    Effectivement je m'étais entêtée à vouloir modifier un truc qui n'était pas très logique.
    Si ça peut aider quelqu'un voici ma nouvelle requête qui fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    replicate('0',4-len((cast(row_number() over(partition by TABA.clefA order by TABB.clefB)-1 as char))))
    	+ (cast(row_number() over(partition by TABA.clefA order by TABB.clefB)-1 as char))
    Merci beaucoup en tout cas!

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 25/02/2009, 00h11
  2. Requète avec NOT EXISTS
    Par missllyss dans le forum SQL
    Réponses: 2
    Dernier message: 23/09/2003, 15h20
  3. Requête avec l'expression Like
    Par Mvu dans le forum ASP
    Réponses: 3
    Dernier message: 02/09/2003, 09h39
  4. problème de requête avec jointures
    Par tinhat dans le forum Requêtes
    Réponses: 7
    Dernier message: 11/08/2003, 10h33
  5. Problème dans requête avec count()
    Par BadFox dans le forum Requêtes
    Réponses: 3
    Dernier message: 08/07/2003, 18h02

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