J'ai mes données dans le tableau que:colonne calculée dans SQL Server
id Author_ID Research_Area Category_ID Paper_Count Paper_Year Rank
---------------------------------------------------------------------------------
1 677 feature extraction 8 1 2005 1
2 677 image annotation 11 1 2005 2
3 677 probabilistic model 12 1 2005 3
4 677 semantic 19 1 2007 1
5 677 feature extraction 8 1 2009 1
6 677 image annotation 11 1 2011 1
7 677 semantic 19 1 2012 1
8 677 video sequence 5 2 2013 1
9 1359 adversary model 1 2 2005 1
10 1359 ensemble method 14 2 2005 2
11 1359 image represent 11 2 2005 3
12 1359 adversary model 1 7 2006 1
13 1359 concurrency control 17 5 2006 2
14 1359 information system 12 2 2006 3
15 ...
16 ...
Alors que je veux avoir une sortie de requête comme:
id Author_ID Category_ID Paper_Count Category_Prob Paper_Year Rank
---------------------------------------------------------------------------------
1 677 8 1 0.333 2005 1
2 677 11 1 0.333 2005 2
3 677 12 1 0.333 2005 3
4 677 19 1 1.0 2007 1
5 677 8 1 1.0 2009 1
6 677 11 1 1.0 2011 1
7 677 19 1 1.0 2012 1
8 677 5 2 1.0 2013 1
9 1359 1 2 0.333 2005 1
10 1359 14 2 0.333 2005 2
11 1359 11 2 0.333 2005 3
12 1359 1 7 0.5 2006 1
13 1359 17 5 0.357 2006 2
14 1359 12 2 0.142 2006 3
15 ...
16 ...
Alors que Category_Prob
est une colonne calculée qui est calculée en deux étapes comme:
Étape d'abord, nous devons avoir un SUM
de Paper_Count
dans eac h Paper_Year
par exemple à savoir Paper_Year = 2005
et Author_ID = 677
, le SUM(Paper_Count) = 3
Deuxième étape, puis pour chaque Category_ID
, nous devons diviser Paper_Count
avec une valeur de SUM(Paper_Count)
dans ce Paper_Year
qui sera 1/3
-à-dire 0.333
et ainsi de suite ...
De plus, je l'ai essayé cette requête:
SELECT
Author_ID, Abstract_Category, Paper_Count,
[Category_Prob] = Paper_Count/SUM(Paper_Count),
Paper_Year, Rank
FROM
Author_Areas
GROUP BY
Author_ID, Abstract_Category, Paper_Year, Paper_Count, Rank
ORDER BY
Author_ID, Paper_Year
Mais il retourne juste 1
dans la colonne Category_Prob
pour toutes les lignes de la table.
Aidez s'il vous plaît!
@ Giorgos - La requête a été exécutée avec succès, mais les valeurs dans la colonne 'calculate_column' ne sont pas aussi désirées. – maliks
@Bridge Je ne pense pas. La clause 'SUM' avec' OVER' est disponible à partir de SQL Server 2005 (ce qui n'est pas sûr à 100%). Sql Server 2012 a ajouté 'ORDER BY' dans la clause' OVER' afin de calculer les totaux cumulés. –
@GiorgosBetsos Vous avez raison, mon erreur – Bridge