ZSka - usunięcie zdublowanych towarów

Zapytania SQL, widoki, Crystal, definicje filtrów, szybkich raportów, wydruków, API, Hydra, .NET

Moderator: mikey

adymala
Posty: 50
Rejestracja: 22 kwie 2020, 15:09
Rola: Konsultant CDN XL
Wersja: 2019

ZSka - usunięcie zdublowanych towarów

Post autor: adymala »

Cześć,
Próbuję zrobić filtr pokazujący zdublowane pozycje na pojedynczej ZSce (wg Symbolu: Twr_Katalog).
Potrzebuję usuwać takie zdublowane Symbole z każdej ZSki, zostawiając tylko jedno jego wystąpienie.
Niestety mój filtr nie działa. :|

Jak zrobić taki filtr pokazujący zdublowane elementy? Nie potrafię tego zrobić ze względu na podwójny klucz (zae_gidNumer + zae_gidLp) na elementach ZSki.

Kod: Zaznacz cały

exists (
select * 
from cdn.ZamElem ze1
	join cdn.TwrKarty tk1 on tk1.Twr_GIDNumer = ze1.ZaE_TwrNumer and tk1.Twr_GIDTyp = ze1.ZaE_TwrTyp
where ze1.ZaE_GIDTyp = zae_gidtyp and ze1.ZaE_GIDNumer = zae_gidnumer and ze1.ZaE_GIDLp <> zae_gidlp and tk1.Twr_Katalog = Twr_Katalog
)
Usunięcie duplikatów.png
Usunięcie duplikatów.png (38.83 KiB) Przejrzano 1270 razy

Awatar użytkownika
praiser
Posty: 685
Rejestracja: 02 lip 2014, 12:22
Rola: Handlowiec CDN XL
Wersja: 2023

Re: ZSka - usunięcie zdublowanych towarów

Post autor: praiser »

Można zbudować prostą funkcję skalarną w SQL , która policzy występowanie 'dubli' i zwrócić wynik do kolumny na liście elementów ZS

Funkcja:

Kod: Zaznacz cały

ALTER FUNCTION [CDN].[duble]
(
	@ZaeID int,
	@Towar int
)
RETURNS int
AS
BEGIN
	
	DECLARE @wynik int
	set @wynik = 0

	SELECT @wynik = count(Twr_Katalog)
	from cdn.ZamElem
	join cdn.TwrKarty on Twr_GIDNumer = ZaE_TwrNumer and Twr_GIDTyp = ZaE_TwrTyp
	where ZaE_GIDNumer = @ZaeID and Zae_TwrNumer = @Towar
	group by Twr_Katalog
	having count(Twr_Katalog) > 1
	
	RETURN @wynik

END
Kolumna w ZS:

Kod: Zaznacz cały

select 
case when cdn.duble(Zae_GidNumer,Zae_TwrNumer) > 1 then 'DUBEL'
else '' END 'Formula'
from CDN.ZamElem
WHERE {filtrSQL}
--------------------------------
Pozdrawiam
WW

taszek
Posty: 585
Rejestracja: 12 wrz 2012, 13:20
Rola: Administrator CDN XL
Wersja: 2016

Re: ZSka - usunięcie zdublowanych towarów

Post autor: taszek »

Gotowy filtr na ZS:

Kod: Zaznacz cały

A.ZaE_GIDLp IN (select MIN(ZE.ZaE_GIDLp) from cdn.ZamElem ZE
join cdn.TwrKarty on ZE.ZaE_TwrTyp = Twr_GIDTyp and Twr_GIDNumer = ZE.ZaE_TwrNumer
where ZE.ZaE_GIDTyp=A.ZaE_GIDTyp AND ZE.ZaE_GIDNumer=A.ZaE_GIDNumer AND ISNULL(Twr_Katalog,'') <> ''
GROUP BY Twr_Katalog
union all
select ZE.ZaE_GIDLp from cdn.ZamElem ZE
join cdn.TwrKarty on ZE.ZaE_TwrTyp = Twr_GIDTyp and Twr_GIDNumer = ZE.ZaE_TwrNumer
where ZE.ZaE_GIDTyp=A.ZaE_GIDTyp AND ZE.ZaE_GIDNumer=A.ZaE_GIDNumer AND ISNULL(Twr_Katalog,'') = ''
)
Założyłem, że te karty co nie mają podanego symbolu to, aby nie były odfiltrowane
Pozdrawiam
Wojtek Cyrklewicz

adymala
Posty: 50
Rejestracja: 22 kwie 2020, 15:09
Rola: Konsultant CDN XL
Wersja: 2019

Re: ZSka - usunięcie zdublowanych towarów

Post autor: adymala »

Panowie bardzo dziękuję za pomoc.
@taszek genialne. Kluczem jest ta literka "A.", przed A.ZaE_GIDLp IN (...) Dzięki niej można więcej :)
Tego triku nie znałem.

Jeszcze raz bardzo serdecznie dziękuję za pomoc.

ODPOWIEDZ