Angenommen, ich habe eine Funktion wie dieseoder erstellen Sie gespeicherte Prozedur
SELECT
ROW_NUMBER() OVER (ORDER BY T1.FinalScore desc) as Position,
T1.Employee, T1.FinalScore
FROM
(SELECT
Position, Employee, AVG(Score) as FinalScore
FROM
dbo.Answers
WHERE
DATEPART(year, EvaluationDate) = @Year
GROUP BY
Employee) as T1
Dies wird eine Tabelle wie solche Rückkehr:
|--------|----------|-------|
|Position| Employee | FScore|
|========|==========|=======|
| 1 | John | 5.6 |
| 2 | Tom | 4.8 |
| 3 | Paul | 3.6 |
| 4 | Mark | 2.0 |
Jetzt brauche ich eine Tendenz Diagramm mit der erstellen vorherige Tabelle, plus die Informationen aus früheren Jahren.
Meine Frage ist, was die beste Praxis ist, sollte ich meine Funktion mehrmals von meiner asp.net Seite aufrufen, um mehrere Tabellen abzurufen, und behandeln Sie die Informationen auf meiner Seite.
Oder sollte ich eine gespeicherte Prozedur erstellen, die diese Funktion mehrmals ausführt und die Daten in eine temporäre Tabelle einfügt? Wie folgt aus:
CREATE TABLE #TOP
(
Position int,
Employee nvarchar(60),
Score decimal(18,2)
)
DECLARE @Flag as int
SET @Flag = @Year - 3
WHILE (@Year > @Flag)
BEGIN
INSERT INTO #TOP
SELECT *
FROM dbo.MyFunction(@Year)
SET @Year = @Year -1
END
SELECT * FROM #TOP
DROP TABLE #TOP
Nun, ich sah vor auf der 'partition by'-Klausel, aber es ist nicht in meinem Fall geeignet, das tatsächliche Datum der Auswertungen sein nicht nach Jahr, ich habe es weggelassen, um die Abfrage zu vereinfachen, gibt es 2 Auswertungen jährlich von Mitarbeiter, man ist getan im Juli, aber der 2. ist es am Jan getan über das nächste Jahr. Also für 2015 habe ich eine Auswertung im Juli/2015 und die 2. ist im Januar/2016 – abichango
die vereinfachte Abfrage für die Funktion hat geholfen, danke! – abichango