Przekazanie parametru do podzapytania

0

No i kolejny problem i zagwozdka.
Zacznę od kodu:

SELECT 
    'Symbol kontrahenta'=CASE WHEN kh_Symbol IS NULL THEN '(Kontrahent nieokreślony)' ELSE kh_Symbol END
    ,adr_Nazwa 'Kontrahent'
    ,adr_Adres 'Adres'
    ,adr_Kod 'Kod pocztowy'
    ,adr_Miejscowosc 'Miasto'
    ,adr_Telefon 'Telefon'
    ,adr_NIP 'NIP'
	,SUM(CASE WHEN dbo.fnMAKE_DOKPARAM(dok_Typ, dok_Podtyp) IN (65536, 65537, 65538, 196608, 327680, 327681) THEN
			(-1) * dok_WartNetto
        ELSE
            dok_WartNetto
        END)
		- (CASE WHEN (SELECT SUM(dok_WartNetto) FROM dok__Dokument WHERE dok_NrPelny IN (SELECT value FROM STRING_SPLIT((SELECT STRING_AGG(pwd_Tekst04, ',') FROM pw_Dane WHERE pwd_IdObiektu IN (???)), ','))) IS NULL THEN 0 
			ELSE (SELECT SUM(dok_WartNetto) FROM dok__Dokument WHERE dok_NrPelny IN (SELECT value FROM STRING_SPLIT((SELECT STRING_AGG(pwd_Tekst04, ',') FROM pw_Dane WHERE pwd_IdObiektu IN (???)), ','))) END
		)
		as 'Wartość netto'
FROM dok__Dokument
	LEFT JOIN kh__Kontrahent ON dok_PlatnikId = kh_Id 
	LEFT JOIN adr__Ewid ON kh_Id = adr_IdObiektu 
	LEFT JOIN sl_Kategoria ON dok_KatId = kat_Id 
	LEFT JOIN sl_GrupaKh ON kh_IdGrupa = grk_Id  
WHERE dok_Status <> 2 
	AND dok_KatId <> (SELECT kat_Id FROM sl_Kategoria WHERE kat_Nazwa = 'Koszt obcy')
	AND ((adr_TypAdresu = 1) OR (dok_PlatnikId IS NULL))  
	AND ( dok_DataWyst >= {D:Dokumenty z okresu od:GETDATE()} AND dok_DataWyst <= {D:do:GETDATE()} ) 
	AND (dbo.fnMAKE_DOKPARAM(dok_Typ, dok_Podtyp) IN (131072, 131074, 131075, 131076, 131077, 262144, 393216, 393217, 393218, 1376256, 1376257, 1376258, 1376259, 917504, 917505, 4063232, 4390912, 4390913, 65536, 65537, 65538, 196608, 327680, 327681)) 
	AND (dok_MagId IN (1, 27))
                AND kh_IdGrupa IN ({CHL_DB:SELECT grk_Id, grk_Nazwa FROM sl_GrupaKh:Grupa Kontrahenta:SELECT grk_Id FROM sl_GrupaKh:dowolna})
                AND adr_IdWojewodztwo IN  ({CHL_DB:SELECT woj_Id, woj_Nazwa FROM sl_Wojewodztwo:Województwo:SELECT woj_Id FROM sl_Wojewodztwo:dowolne})
	AND kh_Id IN ({LM:KH:Kontrahent:SELECT kh_Id FROM kh__Kontrahent:dowolny})
	
GROUP BY kh_Id, kh_Symbol, adr_Nazwa, adr_Adres, adr_Kod, adr_Miejscowosc, adr_Telefon, adr_NIP, grk_Nazwa

Już tłumaczę jakie jest założenie tego zapytania. Ono jest ciut dłuższe w oryginale, ale samo clue jest tutaj zawarte. Otóż.
Zapytanie ma pobierać wartości dokumentów sprzedażowych poszczególnych kontrahentów i je sumować grupując po kontrahencie. Ale niektóre z tych dokumentów, w jednym miejscu w systemie mają wpisaną np fakturę zakupu. W bazie jest to w kolumnie pwd_Tekst04 tabeli pw_Dane. Jak przekazać w miejsce znaków zapytania listę ID dokumentów z zapytania nadrzędnego? Mam nadzieję, że zrozumiecie o co mi chodzi. W razie czego dopytujcie. Jest to fragment zapytania do wklejenia jako zestawienie do Subiekta GT.

0

Hej. O ile dobrze zrozumiałem problem, powinieneś wprowadzić użycie aliasów tabel
Zobacz sobie do dokumentacji tutaj;

czyli poprawiasz ten fragment, dodajac aliasy D i D1

,SUM(CASE WHEN dbo.fnMAKE_DOKPARAM(dok_Typ, dok_Podtyp) IN (65536, 65537, 65538, 196608, 327680, 327681) THEN
			(-1) * dok_WartNetto
        ELSE
            dok_WartNetto
        END)
		- (CASE WHEN (SELECT SUM(dok_WartNetto) FROM dok__Dokument D WHERE dok_NrPelny IN (SELECT value FROM STRING_SPLIT((SELECT STRING_AGG(pwd_Tekst04, ',') FROM pw_Dane WHERE pwd_IdObiektu IN (D.kolumna_z_id)), ','))) IS NULL THEN 0 
			ELSE (SELECT SUM(dok_WartNetto) FROM dok__Dokument D1 WHERE dok_NrPelny IN (SELECT value FROM STRING_SPLIT((SELECT STRING_AGG(pwd_Tekst04, ',') FROM pw_Dane WHERE pwd_IdObiektu IN (D.kolumna_z_id)), ','))) END
		)
		as 'Wartość netto'
FROM dok__Dokument D

Dobrą zasadą jest stosowanie aliasów tabel wszędzie (albo nigdzie, czyli raczej nie mieszamy), więc można by je dodać także do pozostałych tabel w zapytaniu

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