nie rozumiem kodu, prośba o podpowiedzi

0

czy mogę prosić o podpowiedź "co to robi/jak to działa"? (chodzi o logikę)
(albo wskazanie o czym poczytać, ucze się sam metodą prób i błędów, więc nie zawsze wiem w która stronę "patrzeć")

próbuję zmodyfikować kod raportu z programu Subiekt jako samodzielne zapytanie, ale nie rozumiem jak to działa, nie spotkałem sie z takim zapisem

CHL_DB to zapewne jakaś nazwa parametru/zmiennej pobierana z systemu w momencie generowania zestawienia
pytania:
czy to będzie działac prawidłowo jeżeli pozbęde się odwołania do zmiennej (bez {CHL_DB: ... } zostaną same select+union
jak to działa: SELECT -1, '(dowolna)'
jak to działa: ORDER BY 2-1:(dowolna)
jak to działa: "-1 IN" (wynik select)

kawałek problemowego kodu (zestawienia magazynowego generowanego w Subiekcie), jeden z warunków z sekcji WHERE:

(T.tw_IdGrupa IN ({CHL_DB: SELECT -1, '(dowolna)'
                 UNION ALL 
                   SELECT grt_Id, grt_Nazwa
                   FROM sl_GrupaTw 
                   ORDER BY 2:grupa:-1:(dowolna)})
 OR -1 IN ({CHL_DB: SELECT -1, '(dowolna)'
                   UNION ALL 
                   SELECT grt_Id, grt_Nazwa 
                   FROM sl_GrupaTw 
                   ORDER BY 2:grupa:-1:(dowolna)}))

jeżeli wymagane całe zapytanie, podeślę,
bez warunków where kod działa, tylko wyniki sa nieprawidłowe 😉
będę wdzięczny za podpowiedzi, sugestie

3

Na subiekcie się nie znam. ale to wyglada na kod na którego buduje się listę wartości do warunku

T.tw_IdGrupa IN ({CHL_DB: SELECT -1, '(dowolna)' UNION ALL SELECT grt_Id, grt_Nazwa FROM sl_GrupaTw ORDER BY 2:grupa:-1:(dowolna)})

szybie googlanie pokazuje że CHL_DB to kontrolka wyboru, więc lista w niej podpowiadana:

 SELECT -1, '(dowolna)' 
 UNION ALL 
 SELECT grt_Id, grt_Nazwa FROM sl_GrupaTw ORDER BY 2

Pozostała cześć alternatywy:

OR -1 IN ({CHL_DB: SELECT -1, '(dowolna)' UNION ALL SELECT grt_Id, grt_Nazwa FROM sl_GrupaTw ORDER BY 2:grupa:-1:(dowolna)})

Sprawia, że jak użytkownik wybierze wartość (dowolna) to nie będzie filtrowania po tym warunku bo -1 in (-1) będzie prawdziwe

Jak chcesz budować niezależne zapytania, nie wnikając w kod raportów subiekta to pogooglaj o SQL Profilerze, wtedy podejrzysz już przerobiony kod na SQL

0
Panczo napisał(a):

Sprawia, że jak użytkownik wybierze wartość (dowolna) to nie będzie filtrowania po tym warunku bo -1 in (-1) będzie prawdziwe

jak nalezy rozumiec -1 ? to zwykła liczba (wartość), czy odwołanie do pola/kolumny (w bazie lub w raporcie)?? cos mi umknęło :(

2

Zwróć uwagę jak jest budowana lista wyboru:

SELECT -1, '(dowolna)' 
 UNION ALL 
 SELECT grt_Id, grt_Nazwa FROM sl_GrupaTw ORDER BY 2

Czyli najpierw wartość -1 potem rekordy z tabeli sl_GrupaTw

Jeżeli użytkownik nie wybierze nic (a raczej zostawi dowolna) to warunek w SQL będzie wyglądał tak:

(T.tw_IdGrupa IN (-1)
OR -1 IN (-1))

A to już logiczna alternatywa (or/lub) czyli warunek jest prawdziwy jeżeli przynajmniej jeden z elementów jest prawdziwy

dla innej wartości będzie to np tak:

(T.tw_IdGrupa IN (1)
OR -1 IN (1))

Teraz wybierze tylko tw_IdGrupa = 1

0
Panczo napisał(a):

Zwróć uwagę jak jest budowana lista wyboru:

z podziękowaniem, będę kombinował

1 użytkowników online, w tym zalogowanych: 0, gości: 1