Ho i miei dati nella tabella come:colonna calcolata in 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 ...
Mentre io voglio avere una potenza di interrogazione come:
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 ...
Mentre Category_Prob
è una colonna calcolata che viene calcolato in due passaggi come:
Primo passo, dobbiamo avere un SUM
di Paper_Count
in eac h Paper_Year
per esempio cioè Paper_Year = 2005
e Author_ID = 677
, il SUM(Paper_Count) = 3
seconda fase, allora per ogni Category_ID
, dobbiamo dividere Paper_Count
con valore SUM(Paper_Count)
dal fatto che Paper_Year
che sarà 1/3
cioè 0.333
e così via ...
Inoltre, ho provato questa query:
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
ma restituisce solo 1
nella colonna Category_Prob
per tutte le righe nella tabella.
Si prega di aiuto!
@ Giorgos - La query è stata eseguita correttamente ma i valori nella colonna 'calculate_column' non sono quelli desiderati – maliks
@Bridge, penso di no. 'SUM' con la clausola' OVER' è disponibile da SQL Server 2005 in poi (non sicuro al 100%). Sql Server 2012 ha aggiunto il comando 'ORDER BY' nella clausola' OVER' in modo da calcolare i totali parziali. –
@GiorgosBetsos Hai ragione, mio errore – Bridge