Il y a une différence significative entre PAR GROUPE DISTINCT et. Dans les requêtes simples, elles peuvent être identiques, bien que, bien sûr, GROUP BY permette des agrégats.
Mais aussi bien que cela, DISTINCT ne fonctionnera sur tous les domaines avant de faire le DISTINCT, même si elles sont des utilisations déterministes du même domaine (par exemple, la date de début et DATEADD (jour, 1, StartDate) - vérifier l'exécution Planifiez, vous verrez que le DATEADD est fait AVANT le DISTINCT Donc, GROUP BY est presque toujours meilleur
Mais ... il faut garder à l'esprit que dès que GROUP BY inclut quelque chose qui a un index unique sur elle (comme la clé primaire), tous les autres éléments de cette table sont ignorés. Après tout, vous ne pouvez pas obtenir plus unique en incluant d'autres domaines dans la clause GROUP BY.
Alors pourquoi ne pas adopter une approche de:
GROUP BY t.id, u.id
/* All these other fields are ignored but here because they're
in the HAVING/SELECT/ORDER BY clauses
*/
, t.TransactionValue, u.Username, ....
Je reçois que vous êtes toujours avoir à taper tout ça, et il serait agréable d'avoir GROUP BY t.*
, mais si vous voulez, vous pouvez laisser Microsoft savoir par le vote à https://connect.microsoft.com/SQLServer/feedback/ViewFeedback.aspx?FeedbackID=124654
Crud. Ouais, avait un brainfart là-bas. Complètement oublié à propos de distinct. Merci. – DaWolfman
J'ai rejeté, puis réalisé que DISTINCT a répondu à la question qu'il a effectivement posée. Pardon. –