Comment faire un SOMME() à l'intérieur d'une instruction de cas dans SQL server
Je veux ajouter un peu de calcul à l'intérieur de mon cas de déclaration de créer dynamiquement le contenu d'une nouvelle colonne, mais j'obtiens l'erreur:
Colonne 'Test1.qrank' est pas valide dans la liste de sélection, car il n'est pas contenue dans une fonction d'agrégation ou de la clause GROUP BY.
C'est le code que j'ai travaille sur
case
when test1.TotalType = 'Average' then Test2.avgscore
when test1.TotalType = 'PercentOfTot' then (cnt/SUM(test1.qrank))
else cnt
end as displayscore
J'ai essayé de groupe, mais cela n'a pas fonctionné.
Un indice?
Quel est le reste de votre requête. Si vous êtes absent le GROUPE...
OriginalL'auteur Athos | 2012-09-27
Vous devez vous connecter pour publier un commentaire.
L'erreur que vous avez posté, peut se produire lorsque vous utilisez une clause dans le GROUPE PAR une déclaration sans l'inclure dans la sélection.
Exemple
Celui-ci fonctionne!
Ce un pas (omis t.appareil de la sélectionner)
Cela permettra de produire votre erreur se plaindre que je suis groupement pour quelque chose qui n'est pas inclus dans la sélection
Veuillez fournir tous les de la requête pour obtenir plus de soutien.
OriginalL'auteur Guglielmo Moretti
Vous pouvez utiliser une Expression de Table Commune pour créer la SOMME de la première, le rejoindre à la table, puis utilisez la QUAND pour obtenir la valeur de la CTE ou de la table d'origine si nécessaire.
OriginalL'auteur jacksonakj
Si vous utilisez SQL Server 2005 ou au-dessus, vous pouvez utiliser la fonction de fenêtrage
SUM() OVER ()
.Mais ce sera mieux si vous montrer votre requête pour obtenir contexte de ce que vous avez réellement besoin.
over()
retourne plusieurssum columns
et aussi le mauvais résultat.OriginalL'auteur RichardTheKiwi