GROUPE PAR l'utilisation de paramètres dans SQL
Je suis en train de faire en quelque sorte de groupe d'un rapport basé sur une liste déroulante des paramètres pré-définis. Je veux être en mesure de calculer des sous-totaux Total des Heures ou le salaire Total de mon rapport basé sur le Département ou le Code. J'ai créé les paramètres et n'ont aucun problème avec ça, j'ai juste ne suis pas sûr si c'est possible d'utiliser les paramètres d'appeler un groupement de commande. Ci-dessous est l'esprit de ce que je suis désireux, mais la clause GROUP BY ne fonctionne pas pour moi, même sans paramètre.
SELECT EmployeeID, LastName, FirstName, Department, JobCode, PayRate, SUM(Hours) as "Total Hours", SUM(Pay) as "Total Pay"
FROM Employees
GROUP BY @GroupBy
Je suis vraiment un novice quand il s'agit de SQL, de sorte que toute aide est très appréciée.
Merci.
Il serait utile si vous avez posté une table avec des données d'exemple et de deux résultats attendus selon le "groupe par département" / "code"
OriginalL'auteur Jeff Trujillo | 2012-01-13
Vous devez vous connecter pour publier un commentaire.
L'exigence n'est pas 100% clair pour moi, mais j'imagine que votre après quelque chose comme ceci:
Être essayé avec cette configuration:
Évidemment, vous voulez mettre en
@groupBy
soit'dept'
ou de toute autre valeur.OriginalL'auteur René Nyffenegger
Je pense que vous êtes fondamentalement l'incompréhension comment
GROUP BY
œuvres.GROUPEMENT est un moyen d'agréger un grand nombre de lignes ensemble.
Si vous retournez un des champs n'est pas dans le
GROUP BY
, vous devez décider quoi faire avec eux. Vous ne pouvez pas PAS faire n'importe quoi avec eux parce que vous pourriez avoir plusieurs valeurs par groupe. Ils doivent être exclus ou agrégées.De les agréger, vous devez décider quelle est la fonction à utiliser (
MAX
,MIN
,SUM
,AVG
, etc).Si vous souhaitez afficher le nombre de lignes, de dire une par employé, mais que vous souhaitez inclure des informations sur les totaux pour que des employés du ministère, vous avez besoin d'utiliser une sous-requête:
Il y a peut être un moyen de le faire dynamiquement, mais c'est une assez mauvaise idée.
OriginalL'auteur JNK
Group by
est simple, vraiment.Vous avez à ajouter à la liste
group by
chaque champ est inclus dans l'instruction select et ne sont pas nourris à une fonction d'agrégation.Qui est pourquoi vous ne pouvez pas avoir une variable
group by
avec une liste fixe de colonnes dansselect
. (Eh bien, vous pouvez en mysql, mais il applique de manière efficace virtuelany()
globale.)OriginalL'auteur GSerg
N'importe quelle colonne de la sélection qui ne sont pas utilisés par un de la fonction d'agrégation (SUM, MIN, etc) doit être indiquée dans la
GROUP BY
clause.Par exemple,
De bons exemples ici: http://www.w3schools.com/sql/sql_groupby.asp
OriginalL'auteur JSuar