Radosław Nowak

Radosław Nowak Programista,
Analityk,
Konferansjer

Temat: Database Expert - ograniczenie wyników tabeli wartością...

W Database Expert chciałbym ograniczyć tabelę wartością konkretnej kolumny. Mogę ograniczyć dane w Select Expert, ale ograniczenie to przy wykonaniu raportu wybudowywane jest w klauzuli WHERE, a ja chciałbym na poziomie JOIN.
Dla zobrazowania problemu przykłady:
Przykład 1: (oczekiwany rezultat)
select *
from Kontrahenci
left join Adresy on adr_knt_id = knt_id and adr_wysylkowy = 1
[zwróci kontrahentów posiadających adres wysyłkowy i tych, którzy go nie posiadają]

Przykład 2: (generowany schemat)
select *
from Kontrahenci
left join Adresy on adr_knt_id = knt_id
where adr_wysylkowy = 1
[zwróci kontrahentów TYLKO posiadających adres wysyłkowy]

Jedną z opcji jest oczywiście wyklikanie protezy jako SQL Formula, ale mimo to chciałbym się wbić w klauzulę łączenia.
Wykorzystanie Command nie wchodzi w grę.
Czy ma ktoś jakiś pomysł?Ten post został edytowany przez Autora dnia 24.03.21 o godzinie 12:33
Krzysztof Wojtal

Krzysztof Wojtal Specjalista ds
systemu ERP, PL/SQL,
Crystal rep., Power
B...

Temat: Database Expert - ograniczenie wyników tabeli wartością...

Cześć,

Spróbuj w Select Expert wpisać coś takiego:
IsNull(adr_wysylkowy) or adr_wysylkowy = 1

Strzelam, bo wszystkie raporty opieram na zapytaniach SQL - to jest jedyne miejsce, gdzie masz kontrolę na danymi jakie chcesz otrzymać, możesz przejrzeć te dane przed użyciem ich w raporcie.

Pozdrawiam
Krzysiek
Radosław Nowak

Radosław Nowak Programista,
Analityk,
Konferansjer

Temat: Database Expert - ograniczenie wyników tabeli wartością...

Dziękuję Krzysztof za odpowiedź.
Ten patent z "x is null" też testowałem
Problem leży w tym, że Null to też "jakaś wartość", a niedociągnięte kolumny nie posiadają żadnej wartości (z powodu ich nieistnienia w krotce, mimo, iż wyświetla się null!!!).
Zatem musiałaby tam być bardziej konstrukcja typu "not exists", której w WHERE nie wrzucimy (poza zagnieżdżaniem).

Ostatecznie obszedłem to SQL Fieldem, tabela nie jest ciężka i dobrze zindeksowana, więc zdało egzamin.

Ja raporty również opierałem swojego czasu na SQL, (raz, bo wcześniej pracowałem na Jasper Reports i tak mi zostało; dwa, bo uwielbiam surowy czytelny sql :-)), ale ostatnio dużo poprawiam /przerabiam po kimś konstrukcje w Database Expert i dołożenie czegoś w nieswoim projekcie jest łatwiejsze, gdyż pomysł na zapytanie jest również w wersji graficznej (niczym projekt UML).

Jeszcze raz dziękuję, ale jeśli coś przyjdzie Tobie (czy komuś innemu) jeszcze do głowy, to chętnie bym zagadkę rozwiązał do końca.

Pozdrawiam
Radek
Marcin S.

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

Temat: Database Expert - ograniczenie wyników tabeli wartością...

No niestety Database Expert ma bardzo ograniczone możliwości. Nie ma możliwości nakładania dodatkowych warunków na złączenia a o podzapytaniach możemy całkowicie zapomnieć :(

W takich przypadkach najczęściej tworzę widok (view) lub procedurę składowaną (stored procedure) i na tym opieram swój raport. Jeśli procedura ma jakieś parametry to Crystal automatycznie tworzy takie same parametry w raporcie i je później przekazuje do procedury. Ale warto pamiętać, że takie parametry mają nieco ograniczoną funkcjonalność w stosunku do standardowych parametrów.

Czasami pomagają jeszcze formuły SQL Expression, ale one umożliwiają pobieranie tylko wartości dyskretnych, więc można je stosować tylko w szczególnych przypadkach.
Radosław Nowak

Radosław Nowak Programista,
Analityk,
Konferansjer

Temat: Database Expert - ograniczenie wyników tabeli wartością...

Bardzo dziękuję Marcinie za wyczerpującą odpowiedź.
Jak nie jestem miłośnikiem automatów budujących kod, tak akurat Database Expert to narzędzie dość udane i uzyskiwane (generowane) zapytanie spełnia moje normy "czystości" kodu, stąd moja determinacja w poszukiwaniu rozwiązania. Brakowało mi tylko możliwości wpływu na warunki złączenia na poziomie join.

Zdecydowanie w tym wypadku jestem za widokiem (przy prostej konstrukcji).

Podobnie jak i Ty również SQL Expression wykorzystuję raczej w wyjątkowych sytuacjach: gdzie koszt join-owania po jedną wartość jest zbyt duży albo (i tu czysty pragmatyzm) jeśli do rozbudowanego raportu trzeba dodać (nierzadko na szybko) jedną wartość (byle nie w Details!).

Jeszcze raz dziękuję za udział w dyskusji
Marcin S.

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

Temat: Database Expert - ograniczenie wyników tabeli wartością...

Radku, zgadzam się z Tobą w zupełności. Również staram się tworzyć raporty z użyciem tylko Database Expert tak długo jak to jest możliwe. Dzięki temu może taki raport przejąć osoba, która nie zna SQL :)
Niestety w praktyce przy bardziej wymagających raportach sięgam po SQL'a...

Trzeba mieć tylko na uwadze aby nie łączyć w Database Expert tabel z SQL Command. Choć samo narzędzie na to pozwala, to najczęściej jest to zabójca dla raportu pod względem wydajności :)
Wynika to z faktu, że Crystal Reports wysyła wówczas oddzielnie zapytania do bazy danych a pobrane dane łączy lokalnie. Dobra rada - całe zapytanie należy przenieść do SQL Command.

Już nie raz dzięki temu uratowałem sytuację u klienta ;-)

Następna dyskusja:

Ograniczenie wyswietlania d...




Wyślij zaproszenie do