2009-10-02 3 views
0

La procédure stockée ci-dessous renvoie les données d'un certain nombre de tables connexes et effectue également une application croisée sur la table des votes. Cette application croisée renvoie une moyenne de toutes les valeurs de véracité dans la colonne truthid associée à un articleart particulier et la même chose pour la colonne pertinenceid. Cela fonctionne très bien sauf quand il n'y a pas encore de votes pour un article particulier. Dans ce cas, le proc stocké ne renvoie rien du tout. Quelqu'un peut-il penser à un bon moyen de résoudre ce problème étant donné que je ne veux pas fudge un record dans la table des votes?SQL 2008 stocké proc ne renvoie rien si CROSS APPLY n'est rien. Comment puis-je réparer?

( @ArticleID int )

AS 
BEGIN 
WITH Article AS 
(

SELECT 
tbrm_Article.ArticleID, 
tbrm_Article.CountryID, 
tbrm_Article.CategoryID, 
tbrm_Article.Title, 
tbrm_Article.ArticleDetail, 
tbrm_Article.Source, 
tbrm_Article.ArticleDateTimeAdded, 
tbrm_Article.UserId, 
tbrm_Article.ViewCount, 
tbrm_Article.CommentCount, 
tbrm_CountryList.CountryName AS CountryName, 
tbrm_CategoryList.CategoryName AS CategoryName, 
aspnet_Users.UserName AS UserName, 
Truthfulness, 
Relevance 

FROM   
tbrm_Article INNER JOIN 
tbrm_CountryList ON tbrm_Article.CountryID = tbrm_CountryList.CountryID INNER JOIN 
tbrm_CategoryList ON tbrm_Article.CategoryID = tbrm_CategoryList.CategoryID INNER JOIN 
aspnet_Users ON tbrm_Article.UserID = aspnet_Users.UserID 
CROSS APPLY (
SELECT tbrm_Votes.ArticleID, AVG(tbrm_Votes.TruthID), AVG(tbrm_Votes.RelevanceID) 
FROM tbrm_Votes 
WHERE tbrm_Article.ArticleID = tbrm_Votes.ArticleID 
GROUP BY tbrm_Votes.ArticleID 
) AS Votes(ArticleID,Truthfulness,Relevance) 

WHERE 

tbrm_Article.ArticleID = @ArticleID) 
SELECT * FROM Article 
END 

Répondre

2
OUTER APPLY 

similaires à OUTER JOIN.

BTW, n'appelez pas SQL 2008 'SQL 08'. Cela m'a fait penser à SQL 2000 (ie v8).

+0

merci. ça a marché. – Cunners

Questions connexes