J'ai une table de documents avec des champs dire quePossible d'éliminer cette sous-requête?
DocumentID int - PK and autoincrement
LastStatusChangedDateTime - datetime
JurisdictionID - int
DocumentStatusID - int
maintenant je veux apporter une colonne calculée nommée CanChangeStatus
. C'est comme une file d'attente. Donc, si le document est premier dans son statut peut être changé. Ceci est ma requête:
Select d.DocumentID,
(
Select Cast(Case When d.DocumentID = v.DocumentID Then 1 Else 0 End as bit)
From
(
Select Top 1 DocumentID
From Documents
Where JurisdictionID = d.JurisdictionID
And
DocumentStatusID = d.DocumentStatusID
Order By LastStatusChangedDateTime
) v
) as CanChangeStatus
From Documents d
Index est là JurisdictionID
et DocumentStatusID
. Le coupable est la sous-requête - la façon dont j'essaie de calculer CanChangeStatus
. Est-il possible que je puisse accélérer cela ou convertir cette sous-requête en jointure parce que les jointures sont principalement plus rapidement que les sous-requêtes?
Est-ce vraiment besoin d'être fait dans SQL ou pourrait que est le traitement de ce retour effectuer l'action? Il élimine votre sous-requête et la jointure et place la logique dans l'application. –