Subsonic 2.2有没有人知道如何将这个SQL重现为SubSonic查询?

时间:2009-09-14 15:43:55

标签: subsonic

有谁知道如何将此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

我尝试使用View和聚合查询,但是当sqsc_PollOptions表中没有记录时,它会返回没有行,这将是创建新Poll记录时的情况。

这就是我查询视图的方式:

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();

非常感谢任何帮助!

1 个答案:

答案 0 :(得分: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

您需要对投票表执行外部联接,以便您的基本投票表字段仍然存在。请注意,投票将是可以为空的。您可以通过在视图中放置一个case语句来返回0而不是null,或者只是在代码中围绕它进行编码来解决这个问题。

另外,请注意我没有测试这个并且SQL来自内存,因此可能存在拼写错误。你应该能够从这里想出来。