2009-09-14 45 views
1

有谁知道我可以如何重现这个SQL查询作为一个SubSonic查询?Subsonic 2.2有没有人知道我可以如何重现这个SQL作为一个SubSonic查询?

SELECT PollID, AddedDate, AddedBy, QuestionText, IsCurrent, IsArchived, ArchivedDate, 
    (SELECT SUM(Votes) FROM sqsc_PollOptions WHERE PollID = P.PollID) AS Votes 
    FROM sqsc_Polls P 
    WHERE IsArchived = @IsArchived1 OR IsArchived = @IsArchived2 
    ORDER BY AddedDate DESC 

我已经使用视图和汇总查询尝试,但如果有在sqsc_PollOptions表中没有记录创建一个新的投票记录时,这将是情况下,它不返回行。

我这是怎么了查询视图:

return new Select(Aggregate.GroupBy(VwSdPollOption.Columns.PollID, "PollID"), Aggregate.GroupBy(VwSdPollOption.Columns.QuestionText, "QuestionText"), Aggregate.GroupBy(VwSdPollOption.Columns.IsCurrent, "IsCurrent"), Aggregate.Sum(VwSdPollOption.Columns.Votes, "Votes")).From(Views.VwSdPollOption).Where(VwSdPollOption.Columns.CentreName).IsEqualTo(centreName).ExecuteDataSet(); 

任何帮助将不胜感激!

回答

2

视图改成这样:

SELECT P.PollID, P.AddedDate, P.AddedBy, P.QuestionText, 
      P.IsCurrent, P.IsArchived, P.ArchivedDate, 
      v.Votes 
    FROM sqsc_Polls P left outer join 
     (SELECT SUM(Votes) as Votes, PollID 
      FROM sqsc_PollOptions group by PollID) V 
     on P.PollID = V.PollID   
    ORDER BY P.AddedDate DESC 

你需要做的,这样你的基础调查表中的字段仍然存在外部联接表决表。请注意,投票将是可空的int。你可以通过在视图中放置一个case语句来解决这个问题,以返回0而不是null,或者只是在你的代码中编码。

此外,请注意,我没有测试这个,SQL是来自内存,所以可能有错别字。你应该能够从这里弄清楚。

+0

你好,谢谢你我已经尝试创建视图,但我收到一个错误无效列名'PollID'? – McDotNet 2009-09-14 21:36:32

+0

为你更新的SQL代码,现在应该解析字段名称 – 2009-09-14 22:37:39

+0

谢谢吉姆我现在得到这个错误多部分标识符“P.PollID”不能被绑定。我看不到任何明显的拼写错误或不正确的字段名称? – McDotNet 2009-09-15 10:59:07

相关问题