2009-09-14 8 views
1

Est-ce que quelqu'un sait comment je peux reproduire cette requête SQL en tant que requête SubSonic?Subsonic 2.2 est-ce que quelqu'un sait comment je peux reproduire ce SQL comme Requête 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 

J'ai essayé d'utiliser une vue et une requête globale mais elle ne renvoie aucune ligne quand il n'y a pas d'enregistrements dans la table sqsc_PollOptions qui sera le cas lors de la création d'un nouveau record du sondage.

Voici comment j'Interrogation la vue:

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

Toute aide serait grandement appréciée!

Répondre

2

Changer votre point de vue à ceci:

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 

Vous devez faire une jointure externe à la table de vote afin que vos champs de table de sondage de base sont toujours présents. Notez que les votes seront nullable int. Vous pouvez corriger cela en plaçant simplement une instruction case dans la vue pour renvoyer 0 au lieu de null, ou juste le contourner dans votre code.

En outre, notez que je n'ai pas testé cela et que le SQL provient de la mémoire, il peut donc y avoir une faute de frappe. Vous devriez être capable de comprendre cela à partir d'ici.

+0

Salut merci pour cela J'ai essayé de créer la vue, mais je reçois une erreur nom de colonne invalide «PollID»? – McDotNet

+0

mis à jour le code SQL pour vous, devrait résoudre le nom du champ maintenant –

+0

Merci Jim Je reçois maintenant cette erreur identificateur en plusieurs parties "P.PollID" ne pouvait pas être lié. Je ne vois pas de fautes de frappe ou de noms de champs incorrects? – McDotNet