2009-09-14 35 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

相關問題