Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

Hallo,

ich hab folgendes Problem. Mal wieder :)

Ich hab ne Tabelle Bestellungen mit

Bestnr Preis

1 10

1 20

1 5

2 10

2 10

2 10

...

ich will jetzt die Tabelle so umwandeln, das die Bestnr nur einmal existiert und der jeweilige Preis dann aufsummiert wird. Ich hab es vor indem ich eine neue Tabelle anlege und die dazugehörigen Daten dann inserte. Meine Tabelle soll danach so aussehen:

Bestellungen2 mit

Bestrnr Preis

1 35

2 30

...

INSERT INTO Bestellungen2

SELECT ?????

FROM Bestellungen

Wie könnte das ganze aussehen?

Gruss

Hackschnitzel

Das hat wunderbar geklappt. DANKE.

Aber ich hab noch was ganz wichtiges vergessen und zwar brauche ich noch eine Zeile.

Bestellungen 1

bestnr preis artikel

1 10 cola

1 20 bier

1 5 limo

2 10 cola

2 10 cola

2 10 cola

...

Ich will in die Bestellungen2 Tabelle noch eine Spalte. Und zwar, soll mir die Abfrage in die Spalte "drin" eine "1" reinschreiben, wenn unter der jeweiligen bestnr der artikel cola drin vorkommt, ansonsten eine "0". also die Tabelle soll wie folgt aussehen:

Bestellungen2 mit

bestnr preis drin

1 35 1

2 30 1

...

Wie kann ich das noch mit einbauen?

Ursprüngliche Abfrage:

INSERT INTO Bestellungen2

SELECT bestnr,sum(preis)

FROM Bestellungen

GROUP BY bestnr

nur so eine idee: wieso machst du dir nicht selbst ein paar gedanken ?

Ich bin nicht sonderlich gut in SQL. Hab schon versucht eine Lösung zu finden und es funktioniert nicht so wie ich es will.

Ausserdem sehe ich auch gerne alternative Lösungen, die eventuell auch effizienter sind.

Deshalb hoffe ich mal das mir noch jemand weiterhelfen kann.

aber es geht hier nicht um hilfe sondern komplettlösungen. vielleicht ist auch der Kern deiner Aufgabe nicht die Umsetzung sondern das Lernen von SQL ?

Also mein Arbeit besteht darin mit anderen Programmen Tabellen auszuwerten.

Leider Spielen manche Programme mit der Struktur einiger Tabellen nicht mit. Daher muss ich sie umstrukturieren. Da mir aber die Fachkenntnis in SQL etwas fehlt, versuche ich nur dies etwas zu beschleunigen, da es nicht meine Arbeit wiederspiegelt.

Ich hoffe ich habe einen nötigen Grund, um eine Antwort zu erhalten.

Hier mal noch meine fehlerhafte Lösung:

INSERT INTO Bestellungen2

SELECT bestnr, SUM(preis), CASE WHEN Artikel = 'Cola' THEN 1 ELSE 0 END

FROM Bestellungen

GROUP BY bestnr

Fehlermeldung:

selected non-aggregate values must be part of the associated group.

INSERT INTO Bestellungen2

SELECT bestnr, SUM(preis), CASE Artikel drin WHEN "Cola" THEN 1 ELSE 0 END

FROM Bestellungen

GROUP BY bestnr

INSERT INTO Bestellungen2

SELECT bestnr, SUM(preis), CASE Artikel drin WHEN "Cola" THEN 1 ELSE 0 END

FROM Bestellungen

GROUP BY bestnr

Das hier sollte wohl klappen, obwohl mir der Sinn der Aufgabe verborgen bleibt:

INSERT INTO Bestellungen2
SELECT bestnr, SUM(preis), CASE Artikel drin WHEN "Cola" THEN 1 ELSE 0 END
FROM Bestellungen
GROUP BY bestnr, CASE Artikel drin WHEN "Cola" THEN 1 ELSE 0 END[/PHP]

Ich weiss das es wenig Sinn macht, ich versuche nur für mein Problem eine leichte Aufgabe zu finden. Dies sind auch keine Originaldaten.

Aber nochmal zurück. Nach ein bissl tüffteln mach er jetzt bei dieser Abfrage etwas:

INSERT INTO Bestellungen2

SELECT bestnr, SUM(preis), CASE WHEN Artikel = 'Cola' THEN 1 ELSE 0 END

FROM Bestellungen

GROUP BY bestnr, CASE WHEN Artikel = 'Cola' THEN 1 ELSE 0 END

Nur jetzt bekomme ich als Ergebnis,

1 10 1

1 25 0

2 30 1

...

es sollte aber, wenn möglich

1 35 1

2 30 1

...

rauskommen.

Er rechnet jetzt zu jeder bestnr eine Summe ohne Cola und eine Summe nur mit Cola aus. Aber er soll halt die komplette Summe ausrechnen, und in der dritten Spalte einfach nur angeben, ob in der Summe Cola enthalten ist oder nicht.

CASE WHEN Artikel = 'Cola' THEN 1 ELSE 0 END

das funktioniert meines wissen nicht. artikel muss nach Case und vor WHEN kommen. ausserdem hat es im group by befehl nichts zu suchen

Also wenn ich den case befehl im group by nicht unterbringe, bekomme ich immer die Fehlermeldung: "selected non-aggregate values must be part of the associated group."

Und wenn ich Artikel nach case und vor when schreibe, akzeptiert er die Syntax nicht. Also so wie ich es hab, führte er auf jeden Fall mal aus, aber nicht das was ich wollte.

Frag mich bitte nicht nach der Versionsnummer der Datenbank, hört sich dumm an, aber die finde ich nirgens. Es ist ein SQL-Assistent aus einem anderen Programm.

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.