Forcer AVG à renvoyer 0 au lieu de NULL lors de la préformation sur un set vide dans SQL Server 2008

J'ai deux tables appelées Reviews and Levels.

CREATE TABLE [dbo].[Reviews]( [ReviewID] [int] IDENTITY(1,1) NOT NULL, [Rating] [float] NOT NULL, [LevelID] [int] NOT NULL, CREATE TABLE [dbo].[Levels]( [Name] [varchar](50) NOT NULL, [Blocks] [char](960) NOT NULL, [LevelID] [int] IDENTITY(1,1) NOT NULL, 

Je veux être en mesure de sélectionner essentiellement la table des niveaux avec une colonne supplémentaire qui serait la moyenne de tous les avis associés à ce LevelID. J'ai actuellement ce code

 SELECT AVG(Rating) AS Average, Name,Levels.LevelID,Blocks FROM Reviews, Levels WHERE Levels.LevelID = Reviews.LevelID GROUP BY Levels.LevelID, Name, Blocks 

Cela renvoie les résultats corrects pour les niveaux ayant au less une révision. Je veux être en mesure de returnner les niveaux qui n'ont pas d'avis ainsi et donne juste une note moyenne de 0.

Essayez avec cette requête … il va certainement résoudre votre problème ….

 SELECT ISNULL(AVG(Rating),0) AS Average, Name,Levels.LevelID,Blocks FROM Levels LEFT JOIN Reviews ON Levels.LevelID = Reviews.LevelID GROUP BY Levels.LevelID, Name, Blocks 
 SELECT AVG(Rating) AS Average, Name, Levels.LevelID, Blocks FROM Reviews, Levels WHERE Levels.LevelID = Reviews.LevelID GROUP BY Levels.LevelID, Name, Blocks UNION SELECT 0 AS Average, Name, LevelID, Blocks FROM Levels WHERE NOT EXISTS ( SELECT * FROM Reviews WHERE Levels.LevelID = Reviews.LevelID );