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 :

Exécution code SQL sous SQL-Server


Sujet :

Développement SQL Server

  1. #1
    Membre habitué
    Inscrit en
    Mai 2007
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 335
    Points : 148
    Points
    148
    Par défaut Exécution code SQL sous SQL-Server
    Bonjour tlm,
    je débute avec le langage sql et je cherche a exécuter le code ci-dessous sous sql server mais en vain en résumé j'essaye de faire un test sur le champs [Document No_] avec if..then..else mais ca ne marche pas!!!


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    select a.[Document No_],a.Amount ,
     
    if a.[Document No_] = max(a.[Document No_])
    then '0'
    else '1'
    end if as test
     
    from dbo.[Invoice Line] a
    where VIN='YV2AS02A0'
    group by a.[Document No_],a.Amount
    merci pour votre aide

  2. #2
    Membre actif
    Inscrit en
    Janvier 2012
    Messages
    145
    Détails du profil
    Informations forums :
    Inscription : Janvier 2012
    Messages : 145
    Points : 226
    Points
    226
    Par défaut
    Vous pouvez utiliser l'instruction CASE à la place. Votre requête pourrait ressembler à ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT a.[Document No_],
           a.Amount ,
           CASE 
                WHEN a.[Document No_] = SELECT(max(a.[Document No_]) FROM dbo.[Invoice Line]) THEN  '0'
                ELSE '1'
           END AS test
    FROM dbo.[Invoice Line] a
    WHERE VIN='YV2AS02A0'
    ORDER BY a.[Document No_],a.Amount

  3. #3
    Membre habitué
    Inscrit en
    Mai 2007
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 335
    Points : 148
    Points
    148
    Par défaut
    Merci,
    justement il me sort une erreur a la 4 eme ligne
    Lookup Error - SQL Server Database Error: Syntaxe incorrecte vers le mot clé 'SELECT'.
    et je ne comprend pas pourquoi !!!!

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Bonjour,

    ne manquerai-t-il pas des parenthèses pour encadrer la sous-requete ?

    Fin sinon je ne penses pas que ca soit la bonne méthode vu que dans la sous-requete il n'y a pas d'indication du "VIN" qui doit être important je suppose.



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    with tmp as (
    select a.[Document No_], a.amount,
    row_number() over(partition by VIN order by a.[Document No_] desc) as rnk
    from dbo.[Invoice Line] a
    where VIN='YV2AS02A0'
    )
     
    select a.[Document No_], a.amount,
    case when rnk = 1 then '0' else '1' end
    from tmp

  5. #5
    Membre actif
    Inscrit en
    Janvier 2012
    Messages
    145
    Détails du profil
    Informations forums :
    Inscription : Janvier 2012
    Messages : 145
    Points : 226
    Points
    226
    Par défaut
    Oui, j'ai visiblement mal placé (argh) les parenthèses:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT a.[Document No_],
           a.Amount ,
           CASE 
                WHEN a.[Document No_] = (SELECT max(a.[Document No_]) FROM dbo.[Invoice Line] WHERE VIN='YV2AS02A0') THEN  '0'
                ELSE '1'
           END AS test
    FROM dbo.[Invoice Line] a
    WHERE VIN='YV2AS02A0'
    ORDER BY a.[Document No_],a.Amount
    Après comme le remarque punkoff, le filtre sur le champ VIN est important... à laPanic de préciser où il doit se trouver.

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 383
    Points
    18 383
    Par défaut
    Pas besoin de sous-requête ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT [Document No_]
         , Amount
         , CASE [Document No_]
             WHEN max([Document No_]) over(partition by VIN)
             THEN '0'
             ELSE '1'
           END  AS test
      FROM dbo.[Invoice Line]
     WHERE VIN = 'YV2AS02A0';

Discussions similaires

  1. Exécuter un script pl/sql sous sql*plus
    Par Dale_L dans le forum Sql*Plus
    Réponses: 1
    Dernier message: 31/10/2008, 15h25
  2. Trace de requetes SQL sous SQL server
    Par runvus78 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 07/03/2008, 23h31
  3. Importation d'une structre SQL sous SQL-SERVER 2000
    Par loic20h28 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 26/12/2007, 19h00
  4. requete sql sous sql server 2000
    Par lamyae_84 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 20/04/2007, 18h59
  5. Concatenation de 2 entiers en SQL (sous SQL Server)
    Par emazes dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 02/08/2005, 09h28

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