aximand
Goto Top

MS-SQL-Abfrage min max und zugehörige Werte aus JOIN

Hallo,

wenn ich in einem JOIN über 2 Tabellen durchführe und mir min/max-Wert eines Feldes anzeigen lasse. Wie bekomme ich es hin, dass dann zu dem jeweiligen min/max-Wert auch z.B. ein dazugehöriger anderer Wert mit angegeben wird.

SELECT         KHKArtikelKunden.Artikelnummer, KHKArtikelKunden.AuspraegungID ,(ISNULL(KHKVariantenAuspraegungen.Auspraegung1,'') + '   ' + ISNULL(KHKVariantenAuspraegungen.Auspraegung2,'')) AS Variante,   
min(KHKArtikelKunden.Einzelpreis) as VKmin, max(KHKArtikelKunden.Einzelpreis) as VKmax
FROM            KHKArtikelKunden left JOIN
                         KHKVariantenAuspraegungen ON KHKArtikelKunden.AuspraegungID = KHKVariantenAuspraegungen.AuspraegungID
						 where  KHKArtikelKunden.Artikelnummer = '42.002.320'  
group by 	KHKArtikelKunden.Artikelnummer, KHKArtikelKunden.AuspraegungID	,KHKVariantenAuspraegungen.Auspraegung1, KHKVariantenAuspraegungen.Auspraegung2		

Ergebnis

Kunde     Artikel-Nr       Ausprägung    Variante     VK min               VK max
20562	42.002.320	2079	          550       	3,00	           3,00
21150	42.002.320	2079	          550   	        1,25	           1,25

Was ich mir allerdings Wünsche wäre Kunde max, Kunde min in Bezug zu VK max / min:
Artikel             Ausprägung    Variante       VK min           VK max    Kunde minPreis    Kunde maxPreis
42.002.320	2079	          550       	1,25	           3,00            21150                      20562

Kann mir da bitte jemand einen Denkanstoß geben?

Content-Key: 355568

Url: https://administrator.de/contentid/355568

Printed on: April 18, 2024 at 04:04 o'clock

Member: ukulele-7
ukulele-7 Nov 21, 2017 updated at 12:31:23 (UTC)
Goto Top
Grundsätzlich gilt das bei einem GROUP BY alle Werte im Select-Teil entweder gruppiert oder aggregiert werden müssen. Für letzteres bieten die verschiedenen SQL Server verschiedene Funktionen an, welche MSSQL Version ist im Einsatz?

PS: In deinem Fall würde ich vermutlich erst die aggregierten Spalten ermitteln, das alles in einem Subselect packen und dann alle anderen Werte die sich auf min und max beziehen dazu joinen. Etwa so:

SELECT t1.*,t2.spalte2,t2.spalte3
FROM (
SELECT gruppierung, min(spalte1) AS min_spalte1, max(spalte1) AS max_spalte1
FROM tabelle
GROUP BY gruppierung
) t1
LEFT JOIN tabelle t2
ON t1.gruppierung = t2.gruppierung

Das geht zwar auch eleganter aber ist logisch einfach und kann einfach erweitert werden.
Member: Aximand
Aximand Nov 21, 2017 at 13:01:21 (UTC)
Goto Top
verstehe ich leider nicht face-sad
Member: ukulele-7
ukulele-7 Nov 21, 2017 at 14:58:35 (UTC)
Goto Top
Dann poste mal bitte zwei drei Testdatensätze und was da raus kommen müsste. Oben steht ja nur ein Ergebnis, nicht aber aus welchen Datensätzen das entsteht.