gratifiant > microsoft.* > microsoft.fox

OlivierH (18/05/2010, 17h09)
Bonjour à tous,

Avez vous une astuce pour avoir deux order différent dans un UNION,
j'ai besoin en sql serveur de lancer en une requête comme celle ci.
(cette requete ne fonctionne pas car il doit avoir qu'un seul order by à
la fin)

SELECT publicite.*, agences.ag_enseigne
FROM publicite
LEFT JOIN agences ON publicite.ag_codeagence=agences.ag_codeagence
Where pub_naturebien='MAISON'
ORDER BY pub_prix ASC
UNION
SELECT publicite.*, agences.ag_enseigne
FROM publicite
LEFT JOIN agences ON publicite.ag_codeagence=agences.ag_codeagence
Where pub_naturebien<>'MAISON'
ORDER BY pub_naturebien DESC, pub_nbpieces ASC, pub_prix ASC

J'ai besoin de recuperer 1 cursor, je ne peux pas en lancer deux afin de
les fusionner.

D'avance merci
Olivier,
Thierry (18/05/2010, 17h48)
Bonjour,

Voici 2 solutions :)

N°1

;
WITH cte as
(
SELECT publicite.*, agences.ag_enseigne
, row_number() over ( order by pub_prix asc) as ordre
FROM ...

UNION
SELECT publicite.*, agences.ag_enseigne
, row_number() over (pub_naturebien DESC, pub_nbpieces ASC, pub_prix ASC) as
ordre
FROM ...

)
SELECT * FROM cte ORDER BY pub_naturebien, ordre

N° 2

;
WITH cte as
(
SELECT ...
UNION
SELECT ...
)
SELECT * FROM cte
ORDER BY
pub_naturebien,
CASE WHEN pub_naturebien='MAISON' THEN pub_prix END ASC,
CASE WHEN pub_naturebien<>'MAISON' THEN pub_naturebien END DESC,
CASE WHEN pub_naturebien<>'MAISON' THEN pub_nbpieces END ASC,
CASE WHEN pub_naturebien<>'MAISON' THEN pub_prix END ASC
Thierry (18/05/2010, 17h57)
Correctif : retirer le "pub_naturebien," juste après les ORDER BY
OlivierH (18/05/2010, 18h18)
Très Très fort thierry.

Le Over je ne connaissais même pas. Je teste et je te dit quoi ;-)

ps : tu développes toujours sur fox, ou tu as migré sur .net maintenant.

Olivier,

Le 18/05/2010 17:57, Thierry a écrit :
Thierry (18/05/2010, 18h31)
Encore un peu de Fox.
Sinon, je développe surtout en T-SQL et je sous-traite à d'autres
développeurs, la partie interface utilisateur en Silverlight. (il faudra
bien que j'apprenne bientôt ce truc là)
OlivierH (18/05/2010, 18h50)
Thierry,

J'ai l'impression que tout le monde (enfin les foxeurs que je vois sur
le net uwe et venelina, craig boyd et bo durban et etc...)
partent vers Silverlight . Mais je lui trouve deux inconvénient vraiment
genant c'est qu'il n'est pas le même sur
les plates formes linux et mac. Et que la partie data centric est d'une
lourdeur .
Je compare ca à asp.net, déjà que l'on perd 40% de temps en plus par
rapport à fox, silverlight me fait
perdre encore plus de temps. As tu des astuces que je ne connais pas
coté rapatriement des données ?

A tres bientot
Olivier,

Le 18/05/2010 18:31, Thierry a écrit :
[..]
OlivierH (18/05/2010, 19h01)
Thierry

Encore un dernier point dans le union il n'accepte pas un champs de type
TEXT
"//Le type de données text ne peut pas être sélectionné en tant que
DISTINCT, car il n'est pas comparable.//"

As tu une idée de comment je peux l'utiliser ?

Olivier,

Le 18/05/2010 17:57, Thierry a écrit :
Thierry (18/05/2010, 19h02)
Il y a RIA SERVICES pour faciliter tout ça, mais je ne développe pas encore
dessus.

Sinon, ça fonctionne sur Mac et Linux.
OlivierH (18/05/2010, 19h11)
Thierry

je m'en suis sorti avec un cast de varchar
Mais c'est embetant que l'on puisse à utiliser des champs de type text.

Olivier

Le 18/05/2010 19:01, OlivierH a écrit :
[..]
OlivierH (18/05/2010, 19h12)
Ok il faut que je vois ria services.

Sur mac et linux ce n'est pas microsoft qui developpe donc le meme code
peut etre interpreté d'une facon
differente sur ces machines. Et en plus tu as 2 versions de retard,
bonjour les avancés.

@ bientot.

Olivier,

Le 18/05/2010 19:02, Thierry a écrit :
Gregory Adam (18/05/2010, 19h16)
Essaie

union ALL
OlivierH (18/05/2010, 19h52)
Salut greg,

Ca fonctionne mais normalement unionall cela enlève uniquement les doublons,

peut être que le distinct disparait.

Olivier,

Le 18/05/2010 19:16, Gregory Adam a écrit :
[..]
Gilles LAJOT-SARTHOU (19/05/2010, 09h23)
OlivierH,

J'avais remarqué dans mes applications, que le distinct ne fonctionne que sur des champs "texte" de même longueur..j'ai amené soit des PADR() AS soit des CAST()AS pour mettre les aligner les données..

Amicalement
GLS
Membre AtoutFox
"OlivierH" <"nospam[contact]"> a écrit dans le message de news:4316
Thierry

Encore un dernier point dans le union il n'accepte pas un champs de type TEXT
"Le type de données text ne peut pas être sélectionné en tant que DISTINCT, car il n'est pas comparable."

As tu une idée de comment je peux l'utiliser ?

Olivier,

Le 18/05/2010 17:57, Thierry a écrit :
Correctif : retirer le "pub_naturebien," juste après les ORDER BY
OlivierH (19/05/2010, 10h07)
Salut Greg,

Comme j'ai une clause where je peux utiliser union all , il faut attention
car dans d'autres requetes cela peut poser des problemes car le union
all accepte les doublons
de record.

Merci à toi

@+

Olivier,

Le 18/05/2010 19:16, Gregory Adam a écrit :
[..]
Gregory Adam (19/05/2010, 10h18)
Olivier,

Je fais toujours union all - c'est plus rapide

Maintenant, je fais attention d'eviter les doublons

Discussions similaires