Piotr Warda

Piotr Warda
Informatyk-ekonomist
a

Temat: Łączenie tabel po cześci pola

Witam,

Jak w Crystal reports połączyć tabele po części pola? Ręcznie w SQL'u jest to proste:

SELECT * FROM CDN.KodyCN
JOIN CDN.TraElem ON Left(TrE_PCN,8)=KCN_Kod

W tabeli CDN.KodyCN kody zapisane są za pomocą 8 znaków, zaś w tabeli CDN.TraElem - zapisane są za pomocą 10 znaków z dwoma zerami na końcu.

Wiem, iż zamiast grupować sobie w kolejności CDN.KodyCN -> CDN.TraElem -> CDN.TraNag mogę odwrócić kolejność CDN.TraElem -> CDN.TraNag i robić SQL'owe zapytanie do tabeli CDN.KodyCN obcinając kod do 8 znaków...

Pozdrawiam,
Marcin S.

Marcin S. Programista, trener
i konsultant w
zakresie .NET/.NET
Cor...

Temat: Łączenie tabel po cześci pola

W Crystal Reports nie jest to możliwe. W Database Expert - Links można tylko łączyć pola i nie ma możliwości wpisywania dodatkowych warunków na relacjach.

Jedyne obejście to nie łączenie tabel na diagramie - wówczas powstanie iloczyn kartezjański. Następnie w Selection Formulas - Record nałożenie warunku, które będzie udawało złączenie.

Niestety takie rozwiązania jest bardzo nieoptymalne - raport zaciągnie wszystkie dane z bazy danych i będzie je łączył po stronie klienta. Zatem to rozwiązanie można zastosować tylko przy bardzo małych zbiorach.

Proponuję zamiast tego utworzyć widok na bazie danych na podstawie tabeli CDN.KodyCN i w polu z kodem dokleić dwa zera na końcu. Dzięki temu będzie można w Crystalu już połączyć tabelę z widokiem.

Swoją drogą, łączenie tabel w SQL'u po części pola też nie jest zbyt optymalne. Najlepiej zunifikować format danych po których dokonujemy złączeń, ale zdaję sobie sprawę, że nie zawsze jest to możliwe ze względów biznesowych.

Powodzenia!
Piotr Warda

Piotr Warda
Informatyk-ekonomist
a

Temat: Łączenie tabel po cześci pola

Witam,

Tak czułem, że tak się nie da...

Ponieważ z tabeli CDN.KodyCN potrzebowałem wyciągnąć tylko uzupełniającą jednostkę miary, więc załatwiłem sprawę funkcją serwerową wywołaną z zapytania SQL dla kodów CN.

Zmieniłem kolejność grupowania na CDN.TraElem -> CDN.TraNag i filtrując wyłącznie rekordy CDN.TrE_PCN<>'0000000000'.

Pozdrawiam,

Następna dyskusja:

Łączenie danych z tabel




Wyślij zaproszenie do