Subsonic 2.2 Кто-нибудь знает, как я могу воспроизвести этот SQL как SubSonic Query? - PullRequest
1 голос
/ 14 сентября 2009

Кто-нибудь знает, как я могу воспроизвести этот SQL-запрос как SubSonic Query?

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

Любая помощь будет принята с благодарностью!

1 Ответ

2 голосов
/ 14 сентября 2009

Измените свой взгляд на это:

   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 был из памяти, так что там может быть опечатка. Вы должны быть в состоянии понять это отсюда.

...