Mam dwie tabele. indRailType
zawiera listę nazw skojarzonych z wartością identyfikatora używaną w innych tabelach do wskazania rodzaju szyny. WO_BreakerRail
zawiera kolumnę z datą i kolumnę kodu kolejowego, która odpowiada temu samemu kodowi w indRailType
i kilku innych danych. W przypadku każdej czynności na każdym typie szyny istnieje wiersz dla każdej daty. Mógłbym mieć 3 wiersze datowane na 3/19/2010
, każdy wiersz wskazuje inny kod szyny i co się stało.LEFT OUTER JOIN z klauzul WHERE
Kiedy używam poniższego LEFT OUTER JOIN
, otrzymuję stół ze wszystkimi rodzajami szyn, z zerami w rzędach, gdzie nic się nie wydarzyło w dniu 19. Teraz działa to tylko dlatego, że mam tylko jedną datę reprezentowaną w tabeli WO_BreakerRail
teraz, 19. Kiedy dodaję więcej wierszy z różnymi datami, wszystko pójdzie szaleństwem.
To jest moja instrukcja SQL, która teraz daje mi dokładnie wyniki chcę:
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
Teraz, kiedy dodać w WHERE WO_BreakerRail.Date = @Date
klauzuli I utracić wszystkie wiersze w JOIN
których nic się nie stało. Nie chcę tego. Od czytania do góry, to brzmi jak PEŁNA OUTER JOIN
jest to, czego chcę, ale SQL Server Compact Edition nie obsługuje FULL OUTER JOIN
s. Czy jest jakiś sposób obejścia tego, czy też szukam czegoś zupełnie innego?
Nie zapomnij o uwzględnieniu części "czasu" @Date. Jeśli wartości mogą się różnić między północą a północą, będziesz musiał użyć pewnej formy między klauzulami. –
Ta odpowiedź działała doskonale, dziękuję. Philip: Dzięki za ten wskaźnik, chociaż wpadłem na ten problem wcześniej w tym projekcie, który wprawiał mnie w zakłopotanie przez jakiś czas, ale skończyło się na tym, że naprawiłem go w moim kodzie C#, usuwając wszystkie porcje czasu, domyślnie każdą datę do północy. – Wesley
@Wesley, najlepiej jest "posadzić" datetime typy danych, aby usunąć czas, więc czas jest 00: 00: 00.000, a nie północ. –