>Più che un aiuto in sql mi serviva a livello ligico.
logicamente si tratta di prendere il resultset che ricava il valore di valutazione e classificarlo in base all'ordinamento su quel valore.
Ti ho fatto un esempio da eseguire in modo che tu possa vedere cosa intendo:
USE tempdb;
GO
CREATE TABLE dbo.FeedbackLocali
(
IDLocale int
, FeedbackUtente decimal(5,2) NOT NULL
, NumeroFeedback int NOT NULL
, CONSTRAINT PK_dboFeedbackLocali PRIMARY KEY CLUSTERED
(
IDLocale
, NumeroFeedback
)
)
GO
-- locale 1
INSERT INTO dbo.FeedbackLocali (IDLocale, FeedbackUtente, NumeroFeedback)
VALUES (1, 5, 1)
INSERT INTO dbo.FeedbackLocali (IDLocale, FeedbackUtente, NumeroFeedback)
VALUES (1, 2, 2)
INSERT INTO dbo.FeedbackLocali (IDLocale, FeedbackUtente, NumeroFeedback)
VALUES (1, 3, 3)
INSERT INTO dbo.FeedbackLocali (IDLocale, FeedbackUtente, NumeroFeedback)
VALUES (1, 2, 4)
INSERT INTO dbo.FeedbackLocali (IDLocale, FeedbackUtente, NumeroFeedback)
VALUES (1, 2, 5)
-- locale 2
INSERT INTO dbo.FeedbackLocali (IDLocale, FeedbackUtente, NumeroFeedback)
VALUES (2, 1, 1)
INSERT INTO dbo.FeedbackLocali (IDLocale, FeedbackUtente, NumeroFeedback)
VALUES (2, 1, 2)
INSERT INTO dbo.FeedbackLocali (IDLocale, FeedbackUtente, NumeroFeedback)
VALUES (2, 2, 3)
-- locale 3
INSERT INTO dbo.FeedbackLocali (IDLocale, FeedbackUtente, NumeroFeedback)
VALUES (3, 5, 1)
INSERT INTO dbo.FeedbackLocali (IDLocale, FeedbackUtente, NumeroFeedback)
VALUES (3, 5, 2)
INSERT INTO dbo.FeedbackLocali (IDLocale, FeedbackUtente, NumeroFeedback)
VALUES (3, 5, 3)
INSERT INTO dbo.FeedbackLocali (IDLocale, FeedbackUtente, NumeroFeedback)
VALUES (3, 4, 4)
-- locale 4
INSERT INTO dbo.FeedbackLocali (IDLocale, FeedbackUtente, NumeroFeedback)
VALUES (4, 4, 1)
INSERT INTO dbo.FeedbackLocali (IDLocale, FeedbackUtente, NumeroFeedback)
VALUES (4, 3, 2)
INSERT INTO dbo.FeedbackLocali (IDLocale, FeedbackUtente, NumeroFeedback)
VALUES (4, 3, 3)
INSERT INTO dbo.FeedbackLocali (IDLocale, FeedbackUtente, NumeroFeedback)
VALUES (4, 3, 4)
-- locale 5
INSERT INTO dbo.FeedbackLocali (IDLocale, FeedbackUtente, NumeroFeedback)
VALUES (5, 2, 1)
INSERT INTO dbo.FeedbackLocali (IDLocale, FeedbackUtente, NumeroFeedback)
VALUES (5, 3, 2)
GO
-- test dati
SELECT * FROM dbo.FeedbackLocali ORDER BY IDLocale, NumeroFeedback
-- dati classificati
SELECT
IDLocale
, Media = CAST(AVG(FeedbackUtente) AS decimal(5,2))
, Posizione = RANK() OVER(ORDER BY CAST(AVG(FeedbackUtente) AS decimal(5,2)))
FROM
dbo.FeedbackLocali
GROUP BY
IDLocale
-- stesso algoritmo usando with
;WITH Medie (IDLocale, Media) AS
(
SELECT
IDLocale
, CAST(AVG(FeedbackUtente) AS decimal(5,2))
FROM
dbo.FeedbackLocali
GROUP BY
IDLocale
)
SELECT
IDLocale
, Media
, Posizione = RANK() OVER(ORDER BY Media)
FROM
Medie
DROP TABLE dbo.FeedbackLocali
GO
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT
http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi