Select Anweisung mit dynamischer Spalte bestehend aus Max-Wert
Hi Ihrs,
ich suche nach einer Lösung, wie ich im SQL eine Max-Spalte hinzufügen kann.
in einer Tabelle gehören jeweils 2 bis 3 Datensätze zusammen.
ein Beispiel :
und ich möchte jeweils den höhsten Number-Wert mit an den Datensatz hängen. also ne virtuelle Spalte mit der Bezeichnung MaxNumber
und das soll dann so aussehen :
in Access bekomme ich es einwandfrei hin, indem ich eine Abfrage erstelle, in der alle Feldern aufgelistet werden und in der 2. Abfrage der Max-Wert ausgerechnet wird und die SUB-ID als beziehung verwendet.
ich suche nach einer Lösung, wie ich im SQL eine Max-Spalte hinzufügen kann.
in einer Tabelle gehören jeweils 2 bis 3 Datensätze zusammen.
ein Beispiel :
ID | SUB_ID | VALUE | NUMBER |
1 | 1 | 1234 | 0 |
2 | 1 | 5678 | 1 |
3 | 1 | 4321 | 2 |
4 | 2 | 8765 | 0 |
5 | 2 | 1234 | 1 |
6 | 3 | 4321 | 0 |
7 | 3 | 8754 | 1 |
8 | 3 | 1234 | 2 |
und ich möchte jeweils den höhsten Number-Wert mit an den Datensatz hängen. also ne virtuelle Spalte mit der Bezeichnung MaxNumber
und das soll dann so aussehen :
ID | SUB_ID | VALUE | NUMBER | MaxNumber |
1 | 1 | 1234 | 0 | 2 |
2 | 1 | 5678 | 1 | 2 |
3 | 1 | 4321 | 2 | 2 |
4 | 2 | 8765 | 0 | 1 |
5 | 2 | 1234 | 1 | 1 |
6 | 3 | 4321 | 0 | 2 |
7 | 3 | 8754 | 1 | 2 |
8 | 3 | 1234 | 2 | 2 |
in Access bekomme ich es einwandfrei hin, indem ich eine Abfrage erstelle, in der alle Feldern aufgelistet werden und in der 2. Abfrage der Max-Wert ausgerechnet wird und die SUB-ID als beziehung verwendet.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 71910
Url: https://administrator.de/forum/select-anweisung-mit-dynamischer-spalte-bestehend-aus-max-wert-71910.html
Ausgedruckt am: 16.02.2025 um 23:02 Uhr
10 Kommentare
Neuester Kommentar
Also
ich schreib das jetzt mal so vorsich hin:
table ist deine Tabelle aber schon mit einer leeren MaxNumber Spalte (int) hoffe das geht für dich.
So jetzt das UPDATE
UPDATE table SET MaxNumber = MAX(NUMBER) WHERE sub_id = '1';
UPDATE table SET MaxNumber = MAX(NUMBER) WHERE sub_id = '2';
UPDATE table SET MaxNumber = MAX(NUMBER) WHERE sub_id = '3';
Hoffe das geht so habe es nicht getestet.
Gruss MCClane
ich schreib das jetzt mal so vorsich hin:
table ist deine Tabelle aber schon mit einer leeren MaxNumber Spalte (int) hoffe das geht für dich.
So jetzt das UPDATE
UPDATE table SET MaxNumber = MAX(NUMBER) WHERE sub_id = '1';
UPDATE table SET MaxNumber = MAX(NUMBER) WHERE sub_id = '2';
UPDATE table SET MaxNumber = MAX(NUMBER) WHERE sub_id = '3';
Hoffe das geht so habe es nicht getestet.
Gruss MCClane
Moin MirkoW,
bitte schreib noch mal kurz, um was für eine DB es geht.
Eher lassen sich keine speziellen Statements zusammenschreddern.
Funktionieren mit den meisten DBMSen müsste:
[die Tabelle heißt bei mir IDSubId, die Feldnamen wie bei Dir.]
Grüße
Biber
bitte schreib noch mal kurz, um was für eine DB es geht.
Eher lassen sich keine speziellen Statements zusammenschreddern.
Funktionieren mit den meisten DBMSen müsste:
Select Id, Subid, value, number, maxnumber
From IDSubId,
(select subid as subid2 ,
max(number) as maxnumber
FROM IDSubid group by subid)
where Subid=SubId2;
[die Tabelle heißt bei mir IDSubId, die Feldnamen wie bei Dir.]
Grüße
Biber
Moin MirkoW,
genau das meinte ich vorhin mit "mal das Datenbanksystem nennen". Danke.
Unter DB2 braucht die 2. "Tabelle" , also das, was nach dem ersten "From Db2Tabelle " in Klammern steht, einen so genannten CORRELATION NAME.
Den habe ich jetzt dazu gepackt (der Buchstabe "d" oben.) Das reicht.
Oben habe ich (mehr aus Gewohnheit denn aus Notwendigkeit) alle Felder aus dieser "Tabelle d" auch mit einem entsprechenden Präfix versehen.
Genauso fliegt aber:
Grüße
Biber
genau das meinte ich vorhin mit "mal das Datenbanksystem nennen". Danke.
Select Id, Subid, value, number, d.maxnumber
From db2Tabelle,
(select subid as subid2 ,
max(number) as maxnumber
FROM db2tabelle group by subid) d
where Subid=d.SubId2;
Unter DB2 braucht die 2. "Tabelle" , also das, was nach dem ersten "From Db2Tabelle " in Klammern steht, einen so genannten CORRELATION NAME.
Den habe ich jetzt dazu gepackt (der Buchstabe "d" oben.) Das reicht.
Oben habe ich (mehr aus Gewohnheit denn aus Notwendigkeit) alle Felder aus dieser "Tabelle d" auch mit einem entsprechenden Präfix versehen.
Genauso fliegt aber:
SELECT Id, Subid, value, number, maxnumber
FROM db2Tabelle,
(SELECT subid AS subid2 ,
max(number) AS maxnumber
FROM db2tabelle GROUP BY subid) d
WHERE Subid=SubId2;
Grüße
Biber