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

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [Résolu] Order By et Union

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Résolu] Order By et Union

n°1752199
antac
..
Posté le 27-06-2008 à 12:30:00  profilanswer
 

Bonjour,
 
Tout d'abord je sais qu'il est impossible d'avoir plusieurs Order BY dans chaque Union sur des Select d'une table temporaire (Donc pas possible d'avoir une vue)
 
Donc voici quand même ma requete (qui ne fonctionne pas car j'ai 3 Order BY)
SGBD : SQL Server 2005
 
SELECT ID_OFR_MIN, ID_LCN, DateDeb, DateFin, Batiment, Niveau,Place, Locataire, nbJours, Type, Etat
FROM #n
WHERE Etat='Final' AND Type='Exact'
ORDER BY ID_LCN
UNION (
SELECT ID_OFR_MIN, ID_LCN, DateDeb, DateFin, Batiment, Niveau,Place, Locataire, nbJours, Type, Etat
FROM #n
WHERE Etat='Final' AND Type='SUP'
ORDER BY nbJours
)
UNION (
SELECT ID_OFR_MIN, ID_LCN, DateDeb, DateFin, Batiment, Niveau,Place, Locataire, nbJours, Type, Etat
FROM #n
WHERE Etat='Final' AND Type='INF'
ORDER BY nbJours DESC
)
 
J'explique ce que je voudrais obtenir :  
Dans un premier temps tous les records dont le Type est "Exact" trié par ID_LCN
Puis tous les records dont le type est "SUP" trié par nbJours croissants
Enfin les records dont le type set "INF" trié par nbJours décroissants
 
Comment puis-je faire ?
 
Merci


Message édité par antac le 30-06-2008 à 11:11:26
mood
Publicité
Posté le 27-06-2008 à 12:30:00  profilanswer
 

n°1752922
moi23372
Posté le 29-06-2008 à 11:29:29  profilanswer
 

oui tu peux.  
 
tu peux écrire ta query comme ceci.  
 
SELECT *
FROM
(
SELECT ID_OFR_MIN, ID_LCN, DateDeb, DateFin, Batiment, Niveau,Place, Locataire, nbJours, Type, Etat  
FROM #n  
WHERE Etat='Final' AND Type='Exact'  
UNION  
SELECT ID_OFR_MIN, ID_LCN, DateDeb, DateFin, Batiment, Niveau,Place, Locataire, nbJours, Type, Etat  
FROM #n  
WHERE Etat='Final' AND Type='SUP'  
UNION  
SELECT ID_OFR_MIN, ID_LCN, DateDeb, DateFin, Batiment, Niveau,Place, Locataire, nbJours, Type, Etat  
FROM #n  
WHERE Etat='Final' AND Type='INF'  
)
ORDER BY <order by clause>  


Message édité par moi23372 le 29-06-2008 à 11:30:53
n°1753324
antac
..
Posté le 30-06-2008 à 11:11:04  profilanswer
 

En fait, j'ai trouvé une autre solution. J'ai crée une nouvelle colonne Ratio dans ma table temporaire :  
 
A000 : pour les périodes exactes
BXXX (ou X correspond à un ratio Nombre de jours dispo/Nombre de jour totals)
CXXX(ou X correspond à un ratio Nombre de jour totals/Nombre de jours dispo) et je fais un order by sur Ratio à la fin

n°1754136
MagicBuzz
Posté le 01-07-2008 à 17:26:22  profilanswer
 

si tu veux que le UNION conserve l'ordre des sous-requêtes, fait un UNION ALL
 
ceci dit, le fonctionnement n'est pas prévisible. ça peut marcher un jour et ne plus marcher le lendemain. à priori ça devrait marcher tout le temps, puisque le ALL vire le traîtement qui provoque la réorganisation des données (même effet de bord que le GROUP BY)


Message édité par MagicBuzz le 01-07-2008 à 17:27:31
n°1754138
MagicBuzz
Posté le 01-07-2008 à 17:30:06  profilanswer
 

et sinon...
 
SELECT ID_OFR_MIN, ID_LCN, DateDeb, DateFin, Batiment, Niveau,Place, Locataire, nbJours, Type, Etat, 1 lvl, ID_LCN ordby  
FROM #n  
WHERE Etat='Final' AND Type='Exact'  
UNION all
SELECT ID_OFR_MIN, ID_LCN, DateDeb, DateFin, Batiment, Niveau,Place, Locataire, nbJours, Type, Etat, 2 lvl, nbjours ordby  
FROM #n  
WHERE Etat='Final' AND Type='SUP'  
UNION  
SELECT ID_OFR_MIN, ID_LCN, DateDeb, DateFin, Batiment, Niveau,Place, Locataire, nbJours, Type, Etat, 3 lvl, -nbjours ordby  
FROM #n  
WHERE Etat='Final' AND Type='INF'  
ORDER BY lvl, ordby  
 
et roule ma poule
 
intérêt : c'est 100% standard, et ça utilise pas d'exploit, et ça ne surcharge pour ainsi dire pas le moteur contrairement à ta tambouille ;) (qui fait d'ailleurs la même chose, mais avec des traîtements de chaîne inutiles)


Message édité par MagicBuzz le 01-07-2008 à 17:31:42

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

  [Résolu] Order By et Union

 

Sujets relatifs
Pb Erreur changer MDP Admin local via domain [RESOLU][RESOLU]Mise en forme conditionnelle 15 condition / différente cellule
[Resolu] Problème portabilité entre PC sous WinXP[RESOLU] Problème PHP4 --> PHP5
[Résolu][HTML]Problème avec la balise <a href>[Résolu] - [Php] - Fonction Isset
[Résolu] Comparaison Groupe de Fichiers[RESOLU][ORACLE] Sequence - Probleme avec les nombres générés
[résolu] erreur de variable[résolu] Erreur validation W3C
Plus de sujets relatifs à : [Résolu] Order By et Union


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