Order By et Union [Résolu] - SQL/NoSQL - Programmation
Marsh Posté le 29-06-2008 à 11:29:29
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>
Marsh Posté le 30-06-2008 à 11:11:04
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
Marsh Posté le 01-07-2008 à 17:26:22
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)
Marsh Posté le 01-07-2008 à 17:30:06
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)
Marsh Posté le 27-06-2008 à 12:30:00
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