SQL - kontrahenci z wartością atrybutu

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

Moderator: mikey

PlacekJ
Posty: 17
Rejestracja: 25 sty 2016, 15:55
Rola: Inny

SQL - kontrahenci z wartością atrybutu

Post autor: PlacekJ »

Witam

Od ponad 10 lat nie używam SQL-a i mam problem z zapytaniem.
Potrzebuję pobrać KntKarty z wartością jednego atrybutu o nazwie ZEWNID. Jeśli KntKarty nie ma atrybutu to ma być w wyniku z pustą wartością atrybutu ZEWNID.

Takie zapytanie zwraca oczywiście tylko kontrahenta, który ma atrybut i wartość

Kod: Zaznacz cały

SELECT        CDN.KntKarty.*,  CDN.Atrybuty.Atr_Wartosc as ZewnId
FROM            
CDN.KntKarty 
inner join CDN.Atrybuty ON CDN.KntKarty.Knt_GIDNumer = CDN.Atrybuty.Atr_ObiNumer
inner join CDN.AtrybutyKlasy ON CDN.Atrybuty.Atr_AtkId = CDN.AtrybutyKlasy.AtK_ID 
                         
WHERE        (CDN.AtrybutyKlasy.AtK_Nazwa = 'ZEWNID') 

tomasz.kozakiewicz
Posty: 8
Rejestracja: 11 cze 2018, 09:16
Rola: Administrator CDN XL

Re: SQL - kontrahenci z wartością atrybutu

Post autor: tomasz.kozakiewicz »

Witam
Bardziej wydajnie będzie z użyciem Id atrybutu.

SELECT CDN.KntKarty.*,
Atr_Wartosc as ZewnId
FROM
CDN.KntKarty
LEFT join CDN.Atrybuty ON Knt_GIDNumer = Atr_ObiNumer and Atr_AtkId=*Id klasy atrybutu*


I oczywiście jak ma być zwrócony wynika atrybutu lub null to nie może być inner join tylko left . Można też użyć podzapytania.

PlacekJ
Posty: 17
Rejestracja: 25 sty 2016, 15:55
Rola: Inny

Re: SQL - kontrahenci z wartością atrybutu

Post autor: PlacekJ »

Dzięki
Ostatecznie dodałem selecta bo chcę się odwoływać do nazwy atrybutu . Rozumiem, że to miałeś na myśli pisząc o możliwości użycia podzapytania.

Kod: Zaznacz cały

SELECT K.*, 
A.Atr_Wartosc as ZewnId
FROM 
CDN.KntKarty as K
LEFT join CDN.Atrybuty as A ON Knt_GIDNumer = Atr_ObiNumer and Atr_AtkId = (select AtK_ID from CDN.AtrybutyKlasy where AtK_Nazwa = 'ZewnId')

tomasz.kozakiewicz
Posty: 8
Rejestracja: 11 cze 2018, 09:16
Rola: Administrator CDN XL

Re: SQL - kontrahenci z wartością atrybutu

Post autor: tomasz.kozakiewicz »

SELECT CDN.KntKarty.*,
(SELECT TOP 1 Atr_Wartosc FROM CDN.Atrybuty JOIN CDN.AtrybutyKlasy ON
Atr_AtkId=Atk_id WHERE
Atr_ObiTyp=Knt_GidTyp AND Atr_ObiNumer=Knt_GidNumer AND
Atk_Nazwa='ZewnId'
) as ZewnId
FROM
CDN.KntKarty


Oczywiście tylko dla tego przypadku, bo atrybuty mogą być wielowartościowe i takie zapytanie nie zda egzaminu. Możesz jeszcze obudować podzapytanie ISNULL.

PlacekJ
Posty: 17
Rejestracja: 25 sty 2016, 15:55
Rola: Inny

Re: SQL - kontrahenci z wartością atrybutu

Post autor: PlacekJ »

Ponownie dzięki :)
Chyba nie ma na tym forum żadnych punktowych podziękowań?

ODPOWIEDZ