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.
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 (38.83 KiB) Przejrzano 1307 razy
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
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
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.