Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1613 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [SGBD] select * from matable order by @var

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[SGBD] select * from matable order by @var

n°996991
Arjuna
Aircraft Ident.: F-MBSD
Posté le 01-03-2005 à 12:22:31  profilanswer
 

Bonjour,
 
Je suis sous SQL Server 2000.
 
J'ai tenté de faire ce script :
 

Code :
  1. declare @test int
  2. set @test = 2
  3. select orgid, type, subtype
  4. from organization
  5. order by orgid, @test


 
J'obtiens cette erreur :
 

Citation :

Serveur : Msg 1008, Niveau 15, État 1, Ligne 6
L'élément SELECT identifié par le n° ORDER BY 2 contient une variable faisant partie de l'expression identifiant une position de colonne. Les variables ne sont utilisées dans ORDER BY que si l'ordre est une expression référençant un nom de colonne.


 
J'ai donc changé en :

Code :
  1. declare @test varchar(255)
  2. set @test = 'type'
  3. select orgid, type, subtype
  4. from organization
  5. order by orgid, @test


 
J'obtiens toujours la même erreur.
 
Vous avez une idée pour résoudre cette erreur ? Je ne comprends pas du tout le sens du message en fait. A priori, j'ai le droit d'utiliser une variable, mais je ne comprend pas de quel cas :??:

mood
Publicité
Posté le 01-03-2005 à 12:22:31  profilanswer
 

n°997058
vttman2
Je suis Open ...
Posté le 01-03-2005 à 13:41:38  profilanswer
 

Type c pas un mot réservé ?

n°997099
Arjuna
Aircraft Ident.: F-MBSD
Posté le 01-03-2005 à 14:07:01  profilanswer
 

non non, avec "orgid" ça merde aussi de la même façon

n°997115
Arjuna
Aircraft Ident.: F-MBSD
Posté le 01-03-2005 à 14:16:00  profilanswer
 

bon, c'est crade mais ça marche (c'est déjà ça)
 

Code :
  1. declare @test varchar(255)
  2. set @test = 'orgid'
  3. select orgid, type, subtype, toto = case @test when 'orgid' then right('0000000000' + cast(orgid as varchar(255)), 10) when 'type' then type when 'subtype' then subtype end
  4. from organization
  5. order by toto

n°998829
WhyMe
HFR ? Nan, connais pas ...
Posté le 02-03-2005 à 22:41:51  profilanswer
 

Je connais ce genre de pb, mais plutôt sur le 'TOP xxx'
Il faut passer toute ta requête en chaîne, et ensuite 'exécuter' cette chaîne.
Je n'ai pas la syntaxe sous la main pour le moment, j'ai çà au taf, mais là je suis en week end :D

n°1000925
Arjuna
Aircraft Ident.: F-MBSD
Posté le 04-03-2005 à 16:35:22  profilanswer
 

Bon, ben je vais chercher un moyen pour rien foutre jusqu'à ce soir et comme ça je pourrai attendre jusqu'à lundi pour avoir une meilleur solution que la mienne :)

n°1001009
Arjuna
Aircraft Ident.: F-MBSD
Posté le 04-03-2005 à 17:02:49  profilanswer
 

C'est relou ce truc...
 

Code :
  1. select case 2 when 1 then 1 when 2 then 2 end


=> Retourne "2" (logique)
 

Code :
  1. select orgid, count(assetid) toto
  2. from asset
  3. group by orgid
  4. union
  5. select 999, count(assetid) toto
  6. from asset
  7. order by 2


Retourne un jeu de résultat trié selon la deuxième colonne (logique)
 

Code :
  1. select orgid, count(assetid) toto
  2. from asset
  3. group by orgid
  4. union
  5. select 999 orgid, count(assetid) toto
  6. from asset
  7. order by case 2 when 1 then 1 when 2 then 2 end


Marche pas :cry:
 
Le pire, c'est l'erreur :

Serveur : Msg 104, Niveau 15, État 1, Ligne 1
Si l'instruction contient un opérateur UNION, les éléments ORDER BY doivent figurer dans la liste de sélection.


Truc qui n'a rien à voir, d'autant plus que ma variable n'est pas nommée !
 
Et... Histoire de bien rigoler...

Code :
  1. select orgid, count(assetid) toto
  2. from asset
  3. group by orgid
  4. order by case 2 when 1 then 1 when 2 then 2 end


Retourne le résultat trié par la seconde colonne !!!!!!!!!
 
Vin Dieu que c'est chiant ce truc :o
 
 
:heink:
 
Et maintenant :

Code :
  1. select tt, toto
  2. from (
  3. select 999 tt, count(assetid) toto
  4. from asset
  5. union
  6. select orgid tt, count(assetid) toto
  7. from asset
  8. group by orgid
  9. ) tmp
  10. order by case 2 when 1 then tt when 2 then toto end


 
Ca marche !!!!!!
 
Bon, vais boire un café, me pendre et chais pas quoi d'autre encore.


Message édité par Arjuna le 04-03-2005 à 17:07:06

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [SGBD] select * from matable order by @var

 

Sujets relatifs
Javascript et options d'un select...[HTML] Select et disabled
[3615 MyLife] SGBD : Maman j'ai peur !Mise à jour d'un champ Select suite à une sélection
[Java][JDBC]Quelle SGBD/R open source utiliser ?Au_ secours ! : formulaire -> select- > afficher résultats
Utilisation de AS dans un SELECTMec buté et modélisation SGBD
[SQL] UPDATE dans une requete SELECT ?Pb select / submit
Plus de sujets relatifs à : [SGBD] select * from matable order by @var


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR