Problem z zapytaniem

0

Hej,
Mam małą rozkminę i nie wiem jak z tego wyjść.

Mam przygotowane zestawienie porównawcze magazynów przez cały rok. Do towarów mam przypisane atrybuty określające przynależność ich do jakiejś grupy, ale czasami zdarza się, że są też inne atrybuty dopisane do towaru.

Chcąc zaprezentować te towary, jako kolumnę wpisuję coś takiego:

[Grupa] =  isnull((select top 1 (CASE WHEN atk_ID in (2, 3, 4, 53, 54 ,55) then atk_nazwa else ''Pozostałe atrybuty'' END) FROM CDN.Atrybuty at
	               JOIN CDN.AtrybutyKlasy ON Atr_AtkId = AtK_ID 
                    where  at.Atr_ObiNumer=twr.twr_gidnumer and at.atr_Wartosc!='''' and at.atr_obityp=16), ''Pozostałe atrybuty'' )

Wszystko działa tu fajnie do momentu gdy towar nie ma dwóch różnych atrybutów, Jeden z grupy, która wybieram i jakiś inny. Wtedy towar ląduje w "Pozostałe atrybuty", a w sumie nie powinien. Czy jest jakiś sposób na zrobienie tego?

Przykład:
Mam towar A. Posiada on atrybut Opakowania (atk_id=2) oraz towar B, który posiada atrybut Opakowania(atk_id=2) oraz Zestawienia (atk_id-20).
Wtedy zestawienie pokaże, że towar B jest w grupie "Pozostałe atrybuty", a chciałbym aby wskoczył do Opakowania.

1

Jak dla mnie to w kejsie musisz zrobić select counta z having. Jeśli towar A posiada więcej atrybutów niż 1 to wtedy atk_nazwa bo chyba to chcesz osiągnąć.

https://stackoverflow.com/questions/17429673/sql-server-select-statement-inside-a-case

1

Takie podzapytanie moze mocno zajechać baze, ale możesz to zrobić bez case'a:

[Grupa] =  isnull((select top 1 
						atk_nazwa
					FROM 
						CDN.Atrybuty at
						JOIN CDN.AtrybutyKlasy ON Atr_AtkId = AtK_ID 
                    where  	
						at.Atr_ObiNumer=twr.twr_gidnumer 
						and at.atr_Wartosc!='' 
						and at.atr_obityp=16
						and atk_ID in (2, 3, 4, 53, 54 ,55)
					)
					, 'Pozostałe atrybuty' )

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