Strona 1 z 1

Dodanie kolumny PW do tabeli z dokumentami RW

: 25 maja 2020, 10:23
autor: Onek
Witam,
Mam pytanie, potrzebuję dodać do widoku Dokumenty - RW kolumnę z powiązanymi PW.
Powiązanie jest na poziomie zlecenie produkcyjnego.
Napisałem kod, który wypluwa mi wszystkie dokumenty RW i PW do danego zlecenia, mam tylko problem w jaki sposób dodać same dokumenty PW jako nową kolumnę przy RW.

Kod: Zaznacz cały

SELECT PZA_PZLId,
cdn.NumerDokumentu (trn_gidtyp, trn_spityp, trn_trntyp, trn_trnnumer, trn_trnrok, trn_trnseria, trn_trnmiesiac) as 'Dokument'
FROM CDN.ProdZlecenia
INNER JOIN CDN.ProdProcesy ON CDN.ProdProcesy.PPC_Zlecenie = CDN.ProdZlecenia.PZL_Id
INNER JOIN CDN.ProdCzynnosci ON PCZ_Proces = PPC_Id
INNER JOIN CDN.ProdZasoby ON PZA_Czynnosc = PCZ_Id
INNER JOIN CDN.TraSElem ON CDN.ProdZasoby.PZA_Id = CDN.TraSElem.TrS_ZlcNumer AND TrS_ZlcTyp = 14346 
INNER JOIN CDN.TraNag ON CDN.TraSElem.TrS_GIDNumer = CDN.TraNag.TrN_GIDNumer
Może miał ktoś podobne zagadnienie i jest w stanie mnie naprowadzić.

Re: Dodanie kolumny PW do tabeli z dokumentami RW

: 27 maja 2020, 16:42
autor: elmiq
Sugeruje opakować to w funkcję skalarną i w niej zrealizować sklejanie pól tekstowych. Tutaj opcji jest dużo, najpopularniejsze rozwiązania to COALESCE, bądź FOR XML PATH.

Pozdrawiam,
Mateusz

Re: Dodanie kolumny PW do tabeli z dokumentami RW

: 28 maja 2020, 09:27
autor: Onek
Próbuje z :

Kod: Zaznacz cały

SELECT [PZA_PZLId], numer = STUFF((
SELECT N', ' + cdn.NumerDokumentu (trn_gidtyp, trn_spityp, trn_trntyp, trn_trnnumer, trn_trnrok, trn_trnseria, trn_trnmiesiac) FROM CDN.ProdZlecenia
 WHERE [PZA_PZLId] = [PZA_PZLId]
FOR XML PATH(''), TYPE).value(N'.[1]', N'nvarchar(max)'), 1, 2, N'')
FROM CDN.ProdZlecenia as x
INNER JOIN CDN.ProdProcesy ON CDN.ProdProcesy.PPC_Zlecenie = x.PZL_Id
INNER JOIN CDN.ProdCzynnosci ON PCZ_Proces = PPC_Id
INNER JOIN CDN.ProdZasoby ON PZA_Czynnosc = PCZ_Id
INNER JOIN CDN.TraSElem ON CDN.ProdZasoby.PZA_Id = CDN.TraSElem.TrS_ZlcNumer AND TrS_ZlcTyp = 14346 
INNER JOIN CDN.TraNag ON CDN.TraSElem.TrS_GIDNumer = CDN.TraNag.TrN_GIDNumer
order by PZA_PZLId 
Niestety wynik nie pokazuje tylko jednej linii dla danego id zlecenia. Zaczyna brakować mi pomysłów.
Plus przy dodawaniu kolumny chciałem użyć opcji {filtrSQL} odnosząc się do zapytania

Kod: Zaznacz cały

SELECT PZA_PZLId,
cdn.NumerDokumentu (trn_gidtyp, trn_spityp, trn_trntyp, trn_trnnumer, trn_trnrok, trn_trnseria, trn_trnmiesiac) as 'Dokument'
FROM CDN.ProdZlecenia
INNER JOIN CDN.ProdProcesy ON CDN.ProdProcesy.PPC_Zlecenie = CDN.ProdZlecenia.PZL_Id
INNER JOIN CDN.ProdCzynnosci ON PCZ_Proces = PPC_Id
INNER JOIN CDN.ProdZasoby ON PZA_Czynnosc = PCZ_Id
INNER JOIN CDN.TraSElem ON CDN.ProdZasoby.PZA_Id = CDN.TraSElem.TrS_ZlcNumer AND TrS_ZlcTyp = 14346 
INNER JOIN CDN.TraNag ON CDN.TraSElem.TrS_GIDNumer = CDN.TraNag.TrN_GIDNumer
Niestety w takim wypadku filtrSQL na poziomie dokumentu RW zwarca TrN_TrNTyp = 5.

Proszę o poradę czy podchodzę do tematu od dobrej strony.

Pozdrawiam,
Szymon

Re: Dodanie kolumny PW do tabeli z dokumentami RW

: 13 lip 2020, 11:20
autor: taszek
Funkcja skalarna:

Kod: Zaznacz cały

CREATE FUNCTION [CDN].[ListaPW]
(
	-- Add the parameters for the function here
	@GIDNumer INT = 0
   ,@GIDTyp INT = 0
)
RETURNS VARCHAR(MAX)
AS
BEGIN
	
	-- Declare the return variable here
	DECLARE @ListaPW VARCHAR(MAX), @PZL_Id INT

	SELECT @PZL_Id = (SELECT PZL_Id FROM CDN.ProdZlecenia
				INNER JOIN CDN.ProdProcesy ON CDN.ProdProcesy.PPC_Zlecenie = CDN.ProdZlecenia.PZL_Id
				INNER JOIN CDN.ProdCzynnosci ON PCZ_Proces = PPC_Id
				INNER JOIN CDN.ProdZasoby ON PZA_Czynnosc = PCZ_Id
				INNER JOIN CDN.TraSElem ON CDN.ProdZasoby.PZA_Id = CDN.TraSElem.TrS_ZlcNumer AND TrS_ZlcTyp = 14346 
				INNER JOIN CDN.TraNag ON CDN.TraSElem.TrS_GIDNumer = CDN.TraNag.TrN_GIDNumer
				WHERE TrN_GIDTyp = @GIDTyp AND TrN_GIDNumer = @GIDNumer
				GROUP BY PZL_Id)
	
	SELECT @ListaPW = CAST((
				SELECT cdn.NumerDokumentu (trn_gidtyp, trn_spityp, trn_trntyp, trn_trnnumer, trn_trnrok, trn_trnseria, trn_trnmiesiac) + ';' 
				FROM CDN.ProdZlecenia
				INNER JOIN CDN.ProdProcesy ON CDN.ProdProcesy.PPC_Zlecenie = CDN.ProdZlecenia.PZL_Id
				INNER JOIN CDN.ProdCzynnosci ON PCZ_Proces = PPC_Id
				INNER JOIN CDN.ProdZasoby ON PZA_Czynnosc = PCZ_Id
				INNER JOIN CDN.TraSElem ON CDN.ProdZasoby.PZA_Id = CDN.TraSElem.TrS_ZlcNumer AND TrS_ZlcTyp = 14346 
				INNER JOIN CDN.TraNag ON CDN.TraSElem.TrS_GIDNumer = CDN.TraNag.TrN_GIDNumer
				WHERE PZL_Id= @PZL_Id AND TrN_GIDTyp = 1617 
				
				FOR XML PATH (''), ELEMENTS) AS NVARCHAR(MAX)) 

	-- Return the result of the function
	RETURN @ListaPW
END
GO
Dodatkowa kolumna na liście RW:

Kod: Zaznacz cały

SELECT CDN.ListaPW(TrN_GIDNumer,TrN_GIDTyp) [Lista PW]
 FROM CDN.TraNag WHERE {FiltrSQL}

Re: Dodanie kolumny PW do tabeli z dokumentami RW

: 22 lip 2020, 10:59
autor: Onek
Działa, wielkie dzięki za pomoc!