Quelle est la syntaxe correcte pour écrire une fonction d'agrégat en utilisant over (partition by)
?SQL Server 2012: distinct avec clause over dans une fonction d'agrégat
Ou comment cela pourrait-il être réécrit? Je n'ai pas de tableau d'échantillons, car je fais cela comme un exercice pour moi-même. Je me demande si ce serait possible. Veuillez trouver ci-dessous le scénario auquel je pensais.
Prenons un exemple simple comme échantillon:
select
*,
sum (column1 * column2) over (partition by column10, colum12)/100 as sumProduct
into #myTemp
from myTable
La requête ci-dessus fonctionne sur une table qui a ces colonnes. Maintenant, comment pourrais-je écrire la même chose pour des valeurs distinctes de column1
et column2
?
La requête ci-dessous ne fonctionne pas mais c'est le pseudo pour ce que j'essaie d'obtenir.
Le résultat attendu est assez simple (voir distinct column1 * distinct column2
)
select
*,
sum (distinct column1 * distinct column2) over (partition by column10, colum12)/100 as sumProduct
into #myTemp
from myTable
EDIT: Je veux éviter group by
. J'essaie d'utiliser la partition autant que possible afin d'améliorer les fonctions de la fenêtre
Vous ne pouvez pas vous distinct dans la fonction de Windows. Commencez par faire une distinction avant d'appliquer votre fonction. –
Les fonctions d'agrégation ou de fenêtre - à l'exception de 'COUNT()' - ne doivent pas utiliser 'DISTINCT'. –