CUBE
et ROLLUP
sont très utiles pour traiter les agrégats finaux et intermédiaires tout en un seul coup. Pour ce type de question, CUBE serait un bon ajustement si les totaux final et intermédiaire étaient nécessaires afin que cette question et des questions similaires puissent être répondues sans requêtes supplémentaires de la table source. J'ai trouvé CUBE très utile pour éviter les allers-retours à la DB. Cependant, dans le cas où les exigences exactes sont connues à l'avance, un seul choix ciblé (bien démontré par @nate c) est le plus logique.
DECLARE @T1 TABLE (total int, weekday int)
INSERT INTO @T1
SELECT COUNT(1), DATEPART(WEEKDAY,start_date)
FROM attend
WHERE empl_no = 12345
GROUP BY DATEPART(WEEKDAY,start_date) WITH CUBE
SELECT
(SELECT Total FROM @T1 WHERE weekday is NULL) AS total,
(SELECT SUM(weekday) FROM @T1 WHERE weekday = 2 or weekday = 6) AS subset
-- continue using @T1 or a table variable was seriously overkill
Est-ce le double où l'utilisation des pièces de clause ou répétées de même table que vous trouvez laid? – JeffO
Plus la sous-requête. –
FYI: Un CTE n'offre aucun avantage de performance - la réponse de nate c est le moyen le plus efficace. –