2009-09-14 8 views
1

どのように私はこの暗黙のクエリとしてこのSQLクエリを再現できるか知っていますか?Subsonic 2.2 SubSonic QueryとしてこのSQLをどのように再現できるのか誰にでも分かりますか?

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ステートメントを置くだけで、nullの代わりに0を返すか、コード内でコードをコーディングするだけで問題を解決できます。

また、私はこれをテストしていないことに注意してください.SQLはメモリから取得されているため、誤植がある可能性があります。あなたはそれをここから理解できるはずです。

+0

こんにちは私はビューを作成しようとしましたが、無効な列名 'PollID'のエラーが表示されます。 – McDotNet

+0

SQLコードが更新されました。今すぐフィールド名を解決する必要があります –

+0

ありがとうございます。このエラーは複数部分の識別子「P.PollID」をバインドできませんでした。明白なタイプミスや間違ったフィールド名は見当たりませんか? – McDotNet

関連する問題