AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken MySQL versus MsSQL Syntax Group By
Thema durchsuchen
Ansicht
Themen-Optionen

MySQL versus MsSQL Syntax Group By

Ein Thema von Ykcim · begonnen am 11. Mai 2021 · letzter Beitrag vom 14. Mai 2021
Antwort Antwort
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
856 Beiträge
 
Delphi 12 Athens
 
#1

MySQL versus MsSQL Syntax Group By

  Alt 11. Mai 2021, 17:17
Datenbank: MsSQL • Version: 8 • Zugriff über: FireDac
Hallo Zusammen,

ich arbeite seit 15 Jahren immer nur mit MySQL-Datenbanken und muss jetzt ein Projekt auf MsSQL umsetzen. Das klappte bis jetzt sehr gut, aber ich stolper gerade über die Group BY Anweisung...
Delphi-Quellcode:
SELECT    a.zynrefkl AS 'Nr. beim Kunden',
         a.afg_oms1 AS 'Artikel-Bezeichnung',
         b.in__vrrd AS 'Bestand',
         a.per__chk AS 'Abgreifmenge',
         a.minstock AS 'Mindestbestand',
         CASE WHEN b.in__vrrd<a.minstock then 'Mindestmenge unterschrittenELSE 'END AS 'Kommentar',
         SUM(c.b_aantal) AS 'Rückstand'
FROM afgart__ a
LEFT JOIN afgant__ b ON b.afg__ref = a.afg__ref
LEFT JOIN bstlyn__ c ON c.afg__ref = a.afg__ref AND c.vrzvouur<GETDATE() AND c.vrz__tst = '1'
WHERE a.kla__rpn = 'LBBW'
GROUP BY a.zynrefkl
Ich habe dieses SQL-Statement und bekomme die Fehlermeldung:
Zitat:
Column ’afgart__.afg_oms1’ is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
Ich habe leider keine für mich nachvollziehbare Lösung gefunden. Kann mir jemand dabei helfen?

Vielen Dank
Patrick
Patrick
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.867 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: MySQL versus MsSQL Syntax Group By

  Alt 11. Mai 2021, 17:35
Es muss jede Spalte in der Feldliste entweder als Aggegat oder als Teil der Gruppierung vorliegen.
Bei Dir ist das eigentlich für keine der Spalten der Fall. Mich wundert, dass es bei MySQL funktioniert.
Markus Kinzler
  Mit Zitat antworten Zitat
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
856 Beiträge
 
Delphi 12 Athens
 
#3

AW: MySQL versus MsSQL Syntax Group By

  Alt 11. Mai 2021, 18:09
Ich habe gerade Schwierigkeiten, die Logik zu verstehen.

a.zynrefkl ist eine ArtikelNr. Ich möchte das Ergebnis der Summierung für jede ArtikelNr bekommen.
a.afg_oms1 das ist die Artikelbeschreibung. Die gibt es nur einmal. Ich verstehe nicht, was ich hier berechnen soll. Ich kann sie natürlich in die Group By Klausel hinzufügen, aber das hätte keinen Sinn, oder?
b.in__vrrd kommt einmal vor und hängt an der ArtikelNr.
a.per__chk ist die VE und wir aus der Zeile der gruppierten ArtikelNr genommen
a.minstock gilt das gleiche

Ich verstehe leider nicht, warum ich künstlich irgendetwas berechnen soll - eventuell damit ungewollte Effekte erziele - nur um etwas zu gruppieren. Ich wüsste nicht, wie ich das in meinem Fall machen sollte...

Ich habe es jetzt mal so versucht, muss aber das Erbegnis mühselig kontrollieren...

Delphi-Quellcode:
SELECT    a.zynrefkl AS 'Nr. beim Kunden',
         a.afg_oms1 AS 'Artikel-Bezeichnung',
         b.in__vrrd AS 'Bestand',
         a.per__chk AS 'Abgreifmenge',
         a.minstock AS 'Mindestbestand',
         CASE WHEN b.in__vrrd<a.minstock then 'Mindestmenge unterschrittenELSE 'END AS 'Kommentar',
         SUM(c.b_aantal) AS 'Rückstand',
         SUM(d.aant_uit) AS 'Gesamtverbrauch'
FROM afgart__ a
LEFT JOIN afgant__ b ON b.afg__ref = a.afg__ref
LEFT JOIN bstlyn__ c ON c.afg__ref = a.afg__ref AND c.vrzvouur<GETDATE() AND c.vrz__tst = '1'
LEFT JOIN hisafg__ d ON d.afg__ref = a.afg__ref AND MONTH(d.datum___) = MONTH(GETDATE())
WHERE a.kla__rpn = 'LBBW'
GROUP BY a.zynrefkl, a.afg_oms1, b.in__vrrd, a.per__chk, a.minstock
Patrick

Geändert von Ykcim (11. Mai 2021 um 18:12 Uhr)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.867 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: MySQL versus MsSQL Syntax Group By

  Alt 11. Mai 2021, 18:16
Gruppieren heisst ja Zusammenfassen. Die Felder vo a kann man alle in die Gruppierung nehmen.
Wieviel Werte erzeugen die Joins jeweils?
Markus Kinzler
  Mit Zitat antworten Zitat
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
856 Beiträge
 
Delphi 12 Athens
 
#5

AW: MySQL versus MsSQL Syntax Group By

  Alt 11. Mai 2021, 18:25
b (afgant__ ) hat eine 1:1 Verbindung
C (bstlyn__) und d (hisafg__) geben mehrere Daten aus. Aber durch die Summierung werden daraus auch nur ein Datensatz...

Ich muss mich an diese Denkweise gewöhnen. Eigentlich packe ich immer so wenig wie möglich in die Gruppierung, weil ich mir einbilde, dass die Performance dann besser ist...
Patrick

Geändert von Ykcim (11. Mai 2021 um 18:29 Uhr)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.867 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: MySQL versus MsSQL Syntax Group By

  Alt 12. Mai 2021, 07:59
Eine andere Alternative wäre es Aggegate zu erzwingen und so aus einem einzelnen Wert ein Aggegat zu machen, das kostet aber sicherlich mehr als eine erweiterte Gruppierung.
Markus Kinzler
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#7

AW: MySQL versus MsSQL Syntax Group By

  Alt 13. Mai 2021, 18:04
Ich muss mich an diese Denkweise gewöhnen. Eigentlich packe ich immer so wenig wie möglich in die Gruppierung, weil ich mir einbilde, dass die Performance dann besser ist...
Auch wenn das am Beispiel schon geklärt ist:
Wenn Du Dir die mySQL Denkweise abgewöhnst, dann bist Du genau richtig. Diesen Mist gibt es nur bei mySQL und er funktioniert nicht zuverlässig.
Unabhängig von MSSQL, selbst in mySQL würde ich alle Group By Abfragen auf "normal" umstellen, falls Du da noch Projekte laufen hast. Und die Datenbank so umkonfigurieren, dass sie diese schlampige Notation nicht mehr akzeptiert. Dann verhält sich mySQL wie richtige Datenbanken und versucht nicht schlau zu sein und falsch zu liegen. Das Schlimme ist ja, dass Du es ab ein paar Tausend Datensätzen nur mit einigem Aufwand nachvollziehen kannst, ob richtig oder falsch.

Vergiß die alte Denkweise einfach, falls es schneller sein sollte- was kaum nachvollziehbar wäre-, lohnt sich das Risiko überhaupt nicht.
Gruß, Jo
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:33 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz