J'ai deux tables. indRailType
contient une liste des noms associés à une valeur d'ID que j'utilise dans d'autres tables pour indiquer le type de rail. WO_BreakerRail
contient une colonne de date et une colonne de code de rail qui correspond au même code dans indRailType
et quelques autres données. Il y a une ligne WO_BreakerRail
pour chaque activité sur chaque type de rail, pour chaque date. Donc, je pourrais avoir 3 lignes datées pour 3/19/2010
, chaque ligne indique un code ferroviaire différent, et ce qui est arrivé. Lorsque j'utilise le LEFT OUTER JOIN
suivant, j'obtiens une table avec tous les types de rails, avec des zéros dans les lignes où rien ne s'est passé le 19ème. Maintenant, cela ne fonctionne que parce que j'ai seulement une date représentée dans ma table WO_BreakerRail
en ce moment, le 19ème. Lorsque j'ajoute plus de lignes avec des dates différentes, les choses vont se détraquer.LEFT OUTER JOIN avec une clause WHERE
Ceci est mon instruction SQL, qui droit me donne maintenant exactement les résultats que je veux:
SELECT WO_BreakerRail.ID, indRailType.RailType, WO_BreakerRail.CreatedPieces,
WO_BreakerRail.OutsideSource, WO_BreakerRail.Charged,
WO_BreakerRail.Rejected, WO_BreakerRail.RejectedToCrop
FROM indRailType
LEFT OUTER JOIN WO_BreakerRail
ON indRailType.RailCode = WO_BreakerRail.RailCode
Maintenant, quand j'ajoute dans une clause WHERE WO_BreakerRail.Date = @Date
je perds toutes les lignes de la JOIN
qui ne se passait rien. Je ne veux pas ça. De la lecture, cela ressemble à un plein OUTER JOIN
est ce que je veux, mais SQL Server Compact Edition ne prend pas en charge FULL OUTER JOIN
s. Y a-t-il un moyen de contourner cela, ou est-ce que je cherche autre chose?
N'oubliez pas de prendre en compte la partie "time" de @Date. Si les valeurs peuvent varier entre minuit et minuit, vous devrez utiliser une clause between between. –
Cette réponse a parfaitement fonctionné, merci. Philip: Merci pour ce pointeur, bien que j'ai rencontré ce problème plus tôt dans ce projet qui m'a bloqué pendant un certain temps, mais j'ai fini par le corriger dans mon code C#, supprimant toutes les portions de temps, par défaut à minuit. – Wesley
@Wesley, il est préférable de "plancher" les types de données datetime pour supprimer l'heure, de sorte que l'heure est 00: 00: 00.000 et non minuit. –