Benutzer mit den meisten Antworten
SQL-Abfrage Zuordnung

Frage
-
Hallo,
mir fehlt ein Ansatzpunkt...
Ich habe eine Tabelle ZUORDNUNG:
KATEGORIE KAT_WERT
A 100
B 500
C 2000
...Ich möchte durch eine Abfrage (mit einem Wert) eine Zuordnung des Wertes zur entsprechenden Kategorie erhalten.
WERT KATEGORIE
650 -> C
30 -> A
200 -> BBsp. SELECT KATEGORIE from ZUORDNUNG WHERE max(KAT_WERT) <= 650
Wie könnte man so etwas lösen?
Antworten
-
Mit einem SubSelect lässt es sich lösen.
Zuerst den maximalen KAT_WERT der kleiner gleich dem vorgegebenen Wert ist ermitteln und dann mit einer Relation auf die gleiche Tabelle die Kategorie abfragen.
SELECT k.KATEGORIE
FROM (SELECT max(KAT_WERT) as LP FROM ZUORDNUNG WHERE KAT_WERT <= 650) as kp
left join ZUORDNUNG k on kp.LP = k.KAT_WERT
Fred
-
Du hasst im Grunde folgende Möglichkeiten:
DECLARE @Kategorie TABLE ( KATEGORIE CHAR(1) , KAT_WERT INT ); INSERT INTO @Kategorie VALUES ( 'A' , 100 ) , ( 'B' , 500 ) , ( 'C' , 2000 ) ; DECLARE @Wert TABLE ( Wert INT ) ; INSERT INTO @Wert VALUES ( 650 ) , ( 30 ) , ( 200 ) ; SELECT * FROM @Wert W OUTER APPLY ( SELECT TOP ( 1 ) KATEGORIE FROM @Kategorie WHERE KAT_WERT > W.Wert ORDER BY KAT_WERT ASC ) K ( Kategorie ) ; SELECT * , ( SELECT TOP ( 1 ) KATEGORIE FROM @Kategorie WHERE KAT_WERT > W.Wert ORDER BY KAT_WERT ASC ) AS Kategorie FROM @Wert W ; SELECT * , ( SELECT MIN(KATEGORIE) FROM @Kategorie WHERE KAT_WERT > W.Wert ) AS Kategorie FROM @Wert W ; SELECT W.Wert, MIN(K.KATEGORIE) FROM @Wert W INNER JOIN @Kategorie K ON K.KAT_WERT > W.Wert GROUP BY W.Wert;
Die dritte Abfrage den besten Abfrageplan hat. Und die letzte Abfrage funktioniert nur, wenn die Kategoriebezeichnung selbst gleich sortierbar ist, wie der assoziierte Wert.
- Als Antwort markiert perlfred Donnerstag, 29. Dezember 2011 13:57
Alle Antworten
-
Mit einem SubSelect lässt es sich lösen.
Zuerst den maximalen KAT_WERT der kleiner gleich dem vorgegebenen Wert ist ermitteln und dann mit einer Relation auf die gleiche Tabelle die Kategorie abfragen.
SELECT k.KATEGORIE
FROM (SELECT max(KAT_WERT) as LP FROM ZUORDNUNG WHERE KAT_WERT <= 650) as kp
left join ZUORDNUNG k on kp.LP = k.KAT_WERT
Fred
-
Du hasst im Grunde folgende Möglichkeiten:
DECLARE @Kategorie TABLE ( KATEGORIE CHAR(1) , KAT_WERT INT ); INSERT INTO @Kategorie VALUES ( 'A' , 100 ) , ( 'B' , 500 ) , ( 'C' , 2000 ) ; DECLARE @Wert TABLE ( Wert INT ) ; INSERT INTO @Wert VALUES ( 650 ) , ( 30 ) , ( 200 ) ; SELECT * FROM @Wert W OUTER APPLY ( SELECT TOP ( 1 ) KATEGORIE FROM @Kategorie WHERE KAT_WERT > W.Wert ORDER BY KAT_WERT ASC ) K ( Kategorie ) ; SELECT * , ( SELECT TOP ( 1 ) KATEGORIE FROM @Kategorie WHERE KAT_WERT > W.Wert ORDER BY KAT_WERT ASC ) AS Kategorie FROM @Wert W ; SELECT * , ( SELECT MIN(KATEGORIE) FROM @Kategorie WHERE KAT_WERT > W.Wert ) AS Kategorie FROM @Wert W ; SELECT W.Wert, MIN(K.KATEGORIE) FROM @Wert W INNER JOIN @Kategorie K ON K.KAT_WERT > W.Wert GROUP BY W.Wert;
Die dritte Abfrage den besten Abfrageplan hat. Und die letzte Abfrage funktioniert nur, wenn die Kategoriebezeichnung selbst gleich sortierbar ist, wie der assoziierte Wert.
- Als Antwort markiert perlfred Donnerstag, 29. Dezember 2011 13:57