2010-11-08 7 views
0

Je veux faire une requête qui récupère les lignes ordonnées par la valeur d'une colonne et dans le même temps je le veux récupère d'abord les lignes qui a une valeur de concret dans cette colonne.SQL: requête qui récupère les lignes ordonnées par la valeur d'une colonne et récupère d'abord les lignes avec une valeur concrète dans cette colonne

Par exemple:

it 
es 
fr 
it 
es 
fr 

Si je veux montrer les lignes avec "es" d'abord, le résultat serait:

es 
es 
it 
it 
fr 
fr 

Cordialement

Javi

+3

Veuillez donner un exemple de vos données et un exemple du résultat souhaité. Ensuite, nous pouvons voir ce que vous essayez de faire. – dnagirl

+3

Quelle est exactement la définition de la valeur «concrète»? Pas nul? – InSane

+0

Quelle base de données utilisez-vous? –

Répondre

0

Je devine ici que vous voulez obtenir d'abord les enregistrements avec 'es' dans la colonne et ensuite le reste en ascendant commande (dans votre exemple vous utilisez un ordre descendant).

Si tel est le cas, vous pouvez le faire comme ça (Oracle)

Select * 
From 
(
    Select T.*, 0 orden 
    From Table T 
    Where column_name= 'es' 
    Union 
    Select T.*, 1 orden 
    From Table T 
    Where column_name <> 'es' 
) 
Order By orden, column_name 

Pour changer la direction de l'ordre de la colonne vient de mettre un Desc dans l'ordre par article.

EDIT: pour MySQL plutôt essayer

Select * 
From 
(
    Select T.*, 0 orden 
    From Table AS T 
    Where column_name= 'es' 
    Union 
    Select T.*, 1 orden 
    From Table AS T 
    Where column_name <> 'es' 
) 
Order By orden, column_name 

Je ne MySQL par exemple à portée de main maintenant, je ne peux pas tester. Meilleures salutations

+0

qui devrait être "union select (...) de la table T où column_name! = 'Es'", ne devrait-il pas? Sinon, vos 'es'-lignes seront retournées deux fois, une fois en haut et une fois avec toutes les autres lignes ... –

+0

J'ai essayé "select * from my_table où culture =' es 'UNION select * from sedi_i18n où la culture <>' es 'commander par culture' mais je reçois cet ordre: es es en it fr. Une idée? – ziiweb

+0

@Guillem Vicens. J'ai essayé ce que vous dites mais cette erreur apparaît SQLSTATE [42000]: Erreur de syntaxe ou violation d'accès: 1064 Vous avez une erreur dans votre syntaxe SQL; consultez le manuel qui correspond à votre version du serveur MySQL pour la bonne syntaxe à utiliser près de Table T Où culture = 'es' Union Sélectionnez T. *, 1 orden De l'onglet 'à la ligne 5 – ziiweb

Questions connexes