Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 31/01/2012, 11h22   #1
Rédacteur/Modérateur
 
Avatar de jpcheck
 
Jean-Philippe ANDRÉ
Inscription : juillet 2007
Messages : 7 874
Détails du profil
Informations personnelles :
Nom : Jean-Philippe ANDRÉ
Âge : 28
Localisation : France

Informations forums :
Inscription : juillet 2007
Messages : 7 874
Points : 10 740
Points : 10 740
Envoyer un message via MSN à jpcheck
Par défaut Forcer le tri sous SQL Server

Hello,

j'aimerais savoir s'il est possible d'avoir un ordre "forcé" par la requête SQL.

Exemple de données :
ColCD
AED
EUR
JPY
USD

Objectif de tri (forecer EUR et USD en 1ere et 2e position, le reste par ordre alpha) :
EUR
USD
AED
JPY

Sous Access, j'arrive à cela en mettant en clause ORDER BY:
Code SQL :
ORDER BY ColCD='EUR, ColCD='USD', ColCD ASC;

Mais lorsque je tape dans une base SQL server ca me jette en indiquant
Citation:
Syntaxe incorrecte vers '=' (#102)
Est-ce envisageable ou bien je me contente d'un ordre alpha non forcé?

Merci bien
__________________
Pas de question technique par MP, je ne réponds pas

Mon perso ? Une vraie brute

Tutos Access, Tâches planifiées et Batch,Tables de Paramètres sous Access, Excel et Batch, Tâches planifiées et Access
jpcheck est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 11h45   #2
Membre émérite
 
Homme Tony
Développeur .NET
Inscription : novembre 2010
Messages : 570
Détails du profil
Informations personnelles :
Nom : Homme Tony
Localisation : France

Informations professionnelles :
Activité : Développeur .NET

Informations forums :
Inscription : novembre 2010
Messages : 570
Points : 821
Points : 821
Bonjour,

probablement que le problème ne vient pas de là, mais il manque une quote dans le code donné :

Code :
ORDER BY ColCD='EUR', ColCD='USD', ColCD ASC;
Il est probable que ça soit un simple oubli sur le forum, mais on ne sait jamais.
__________________
Le Porc est un loup pour le Porc.
asmduty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 11h48   #3
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 686
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 686
Points : 10 435
Points : 10 435
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Non cette syntaxe est propre à Access et ne fonctionnera pas sur autres SGBD.
Il faut utiliser la fonction case :
Code :
1
2
ORDER BY CASE ColCD WHEN 'EUR' then 1 when 'USD' then 2 else 3 end ASC
       , ColCD ASC
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 31/01/2012, 11h56   #4
Rédacteur/Modérateur
 
Avatar de jpcheck
 
Jean-Philippe ANDRÉ
Inscription : juillet 2007
Messages : 7 874
Détails du profil
Informations personnelles :
Nom : Jean-Philippe ANDRÉ
Âge : 28
Localisation : France

Informations forums :
Inscription : juillet 2007
Messages : 7 874
Points : 10 740
Points : 10 740
Envoyer un message via MSN à jpcheck
Merci Waldar, j'essaie ca,

asmduty, c'etait bien une erreur de syntaxe côté forum
__________________
Pas de question technique par MP, je ne réponds pas

Mon perso ? Une vraie brute

Tutos Access, Tâches planifiées et Batch,Tables de Paramètres sous Access, Excel et Batch, Tâches planifiées et Access
jpcheck est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 12h02   #5
Rédacteur/Modérateur
 
Avatar de jpcheck
 
Jean-Philippe ANDRÉ
Inscription : juillet 2007
Messages : 7 874
Détails du profil
Informations personnelles :
Nom : Jean-Philippe ANDRÉ
Âge : 28
Localisation : France

Informations forums :
Inscription : juillet 2007
Messages : 7 874
Points : 10 740
Points : 10 740
Envoyer un message via MSN à jpcheck
La syntaxe ne fonctionne pas

Je vais avancer sur d'autres points en cherchant en parallèle une méthode
__________________
Pas de question technique par MP, je ne réponds pas

Mon perso ? Une vraie brute

Tutos Access, Tâches planifiées et Batch,Tables de Paramètres sous Access, Excel et Batch, Tâches planifiées et Access
jpcheck est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 12h16   #6
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 686
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 686
Points : 10 435
Points : 10 435
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Mais si ça fonctionne :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
declare @t TABLE (ColCD char(3))
 
INSERT INTO @t VALUES ('AED')
INSERT INTO @t VALUES ('EUR')
INSERT INTO @t VALUES ('JPY')
INSERT INTO @t VALUES ('USD')
 
  SELECT ColCD
    FROM @t
ORDER BY CASE ColCD WHEN 'EUR' then 1 when 'USD' then 2 else 3 end ASC
       , ColCD ASC
 
 
ColCD
-----
EUR
USD
AED
JPY
Edit : peut-être pas en SQL-Server 2000 cela dit, quelle est votre version ?
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 13h02   #7
Rédacteur/Modérateur
 
Avatar de jpcheck
 
Jean-Philippe ANDRÉ
Inscription : juillet 2007
Messages : 7 874
Détails du profil
Informations personnelles :
Nom : Jean-Philippe ANDRÉ
Âge : 28
Localisation : France

Informations forums :
Inscription : juillet 2007
Messages : 7 874
Points : 10 740
Points : 10 740
Envoyer un message via MSN à jpcheck
J'évolue depuis Access 2007 (lien ODBC) sur une base SQL server 2008
__________________
Pas de question technique par MP, je ne réponds pas

Mon perso ? Une vraie brute

Tutos Access, Tâches planifiées et Batch,Tables de Paramètres sous Access, Excel et Batch, Tâches planifiées et Access
jpcheck est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 14h40   #8
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 686
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 686
Points : 10 435
Points : 10 435
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Bizarre, mon script est bien sur SQL-Server 2008.
C'est peut-être le lien ODBC qui plante le ORDER BY mais ça me paraît étrange.

Qu'est-ce que ça donne en passant par une vue dans ODBC ?
Code :
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
CREATE TABLE T_Test (ColCD char(3) NOT NULL)
 
INSERT INTO T_Test VALUES ('AED')
INSERT INTO T_Test VALUES ('EUR')
INSERT INTO T_Test VALUES ('JPY')
INSERT INTO T_Test VALUES ('USD')
GO
 
CREATE VIEW V_Test (ColCD, Tri) AS 
SELECT ColCD
     , CASE ColCD WHEN 'EUR' then 1 when 'USD' then 2 else 3 end
  FROM T_Test
GO
 
  SELECT ColCD
    FROM V_Test
ORDER BY Tri   ASC
       , ColCD ASC
 
ColCD
-----
EUR
USD
AED
JPY
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 14h58   #9
Rédacteur/Modérateur
 
Avatar de jpcheck
 
Jean-Philippe ANDRÉ
Inscription : juillet 2007
Messages : 7 874
Détails du profil
Informations personnelles :
Nom : Jean-Philippe ANDRÉ
Âge : 28
Localisation : France

Informations forums :
Inscription : juillet 2007
Messages : 7 874
Points : 10 740
Points : 10 740
Envoyer un message via MSN à jpcheck
Le code fonctionne bien dans mon SQL Server Manager.

Je vais étudier les possilbités de Vues ca sera un très bon moyen de faire cela

Merci !
__________________
Pas de question technique par MP, je ne réponds pas

Mon perso ? Une vraie brute

Tutos Access, Tâches planifiées et Batch,Tables de Paramètres sous Access, Excel et Batch, Tâches planifiées et Access
jpcheck est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 17h52   #10
Membre Expert
 
Avatar de pacmann
 
Homme Pacman Pacman
Business analyst
Inscription : juin 2004
Messages : 1 417
Détails du profil
Informations personnelles :
Nom : Homme Pacman Pacman
Âge : 31
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Business analyst
Secteur : Finance

Informations forums :
Inscription : juin 2004
Messages : 1 417
Points : 2 309
Points : 2 309
Salut !

A tester si tu peux faire avec des vues "inline", c'est à dire :

Code :
1
2
3
4
5
6
7
8
 
  SELECT t.ColCD
    FROM @t AS t
       LEFT OUTER JOIN 
              (SELECT 'EUR' colcd, 1 rk UNION ALL
               SELECT 'USD' colcd, 2 rk) AS u
       ON t.colcd = u.colcd
  ORDER BY COALESCE(rk, 3)
__________________

(c'est ma photo)
Paku, Paku !
Pour les jeunes incultes : non, je ne suis pas un pokémon...

Le pacblog : http://pacmann.over-blog.com/
pacmann est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h13.


 
 
 
 
Partenaires

Hébergement Web