MysterioJN
SQL-Guru
- Beiträge
- 158
Hey ihr Lieben,
unsere Vertriebs-Datenbank ist nun von MYSQL zu MSSQL umgezogen.
Bisher haben wir Nachts immer eine Tabelle gelöscht und neu erzeugt mittels folgendem Select:
Das hat Prima geklappt.
Nun muss der Select auch auf MSSQL funktionieren. Ein paar Dinge habe ich schon abändern (blau gekennzeichnet) können:
select
aid_artikel.anr AS BstNr,
aid_artikel.titel AS Titel,
aid_artikel.traeger_na AS Traeger,
aid_artikel.ag AS Redaktion,
aid_artikel.redaktion AS Redakteur,
aid_artikel.mnr AS MelNr,
tbltagebestand.Tage_Vertrieb_Gesamt AS VerTage,
artikel.bestand AS BHLag,
lagersperrlager.bestand AS BSLag,
artikel.bedarf AS Vormer,
artikel.meldeb AS Warn,
IIf(artikel.meldeb >= artikel.bestand, 'ja', 'nein') AS Warn_er,
IIf(Artikel.lbanr<>Artikel.anr, Artikel.lbanr, '') AS Paar,
round(sum(CASE WHEN tab.art = 'selektiert' THEN tab.ST else 0 END) - sum(CASE WHEN tab.art = 'storniert' THEN tab.ST else 0 END),0) as Absatz,
round(sum(CASE WHEN tab.art = 'selektiert' THEN tab.ST else 0 END) - sum(CASE WHEN tab.art = 'storniert' THEN tab.ST else 0 END),0) / tbltagebestand.Tage_Vertrieb_Gesamt AS dAT,
round((artikel.bestand / (round(sum(CASE WHEN tab.art = 'selektiert' THEN tab.ST else 0 END) - sum(CASE WHEN tab.art = 'storniert' THEN tab.ST else 0 END),0) / tbltagebestand.Tage_Vertrieb_Gesamt)),0) AS VerfTage,
getdate() + (artikel.bestand / (round(sum(CASE WHEN tab.art = 'selektiert' THEN tab.ST else 0 END) - sum(CASE WHEN tab.art = 'storniert' THEN tab.ST else 0 END),0) / tbltagebestand.Tage_Vertrieb_Gesamt)) AS VerfBis
FROM aid_artikel LEFT JOIN artikel ON aid_artikel.anr = artikel.anr LEFT JOIN tab ON aid_artikel.anr = tab.anr LEFT JOIN tbltagebestand ON aid_artikel.anr = tbltagebestand.BstNr LEFT Join lagersperrlager ON aid_artikel.aken = lagersperrlager.aken
WHERE artikel.bestand <5000000 AND aid_artikel.status = 'aktuell'
GROUP BY aid_artikel.anr
ORDER BY artikel.bedarf DESC
Wenn ich das ausführen will, kommt folgende Fehlermeldung:
Die aid_artikel.titel-Spalte ist in der Auswahlliste ungültig, da sie nicht in einer Aggregatfunktion und nicht in der GROUP BY-Klausel enthalten ist.
Warum verlangt er das von mir? Das hat es mit den gleichen Daten auf dem MYSQL auch nicht interessiert. Ich kann doch nicht alles in GROUP BY setzen, zumal da ja auch "eigens erzeugte Spalten" (quasi alle Berechnungen) dabei sind die ich ja namentlich nicht ansprechen kann... grrr
unsere Vertriebs-Datenbank ist nun von MYSQL zu MSSQL umgezogen.
Bisher haben wir Nachts immer eine Tabelle gelöscht und neu erzeugt mittels folgendem Select:
Code:
select
aid_artikel.anr AS BstNr,
aid_artikel.titel AS Titel,
aid_artikel.traeger_na AS Traeger,
aid_artikel.ag AS Redaktion,
aid_artikel.redaktion AS Redakteur,
aid_artikel.mnr AS MelNr,
tbltagebestand.Tage_Vertrieb_Gesamt AS VerTage,
artikel.bestand AS BHLag,
lagersperrlager.bestand AS BSLag,
artikel.bedarf AS Vormer,
artikel.meldeb AS Warn,
If(artikel.meldeb >= artikel.bestand, "ja","nein") AS Warn_er,
If(Artikel.lbanr<>Artikel.anr,Artikel.lbanr,"") AS Paar,
round(sum(CASE WHEN tab.art = 'selektiert' THEN tab.ST else 0 END) - sum(CASE WHEN tab.art = 'storniert' THEN tab.ST else 0 END),0) as Absatz,
round(sum(CASE WHEN tab.art = 'selektiert' THEN tab.ST else 0 END) - sum(CASE WHEN tab.art = 'storniert' THEN tab.ST else 0 END),0) / tbltagebestand.Tage_Vertrieb_Gesamt AS dAT,
round((artikel.bestand / (round(sum(CASE WHEN tab.art = 'selektiert' THEN tab.ST else 0 END) - sum(CASE WHEN tab.art = 'storniert' THEN tab.ST else 0 END),0) / tbltagebestand.Tage_Vertrieb_Gesamt)),0) AS VerfTage,
DATE_ADD(curdate(),Interval (artikel.bestand / (round(sum(CASE WHEN tab.art = 'selektiert' THEN tab.ST else 0 END) - sum(CASE WHEN tab.art = 'storniert' THEN tab.ST else 0 END),0) / tbltagebestand.Tage_Vertrieb_Gesamt)) DAY) as VerfBis
FROM aid_artikel LEFT JOIN artikel ON aid_artikel.anr = artikel.anr LEFT JOIN tab ON aid_artikel.anr = tab.anr LEFT JOIN tbltagebestand ON aid_artikel.anr = tbltagebestand.BstNr LEFT Join lagersperrlager ON aid_artikel.aken = lagersperrlager.aken
WHERE artikel.bestand <5000000 AND aid_artikel.status = 'aktuell'
GROUP BY aid_artikel.anr
order by artikel.bedarf DESC
Das hat Prima geklappt.
Nun muss der Select auch auf MSSQL funktionieren. Ein paar Dinge habe ich schon abändern (blau gekennzeichnet) können:
select
aid_artikel.anr AS BstNr,
aid_artikel.titel AS Titel,
aid_artikel.traeger_na AS Traeger,
aid_artikel.ag AS Redaktion,
aid_artikel.redaktion AS Redakteur,
aid_artikel.mnr AS MelNr,
tbltagebestand.Tage_Vertrieb_Gesamt AS VerTage,
artikel.bestand AS BHLag,
lagersperrlager.bestand AS BSLag,
artikel.bedarf AS Vormer,
artikel.meldeb AS Warn,
IIf(artikel.meldeb >= artikel.bestand, 'ja', 'nein') AS Warn_er,
IIf(Artikel.lbanr<>Artikel.anr, Artikel.lbanr, '') AS Paar,
round(sum(CASE WHEN tab.art = 'selektiert' THEN tab.ST else 0 END) - sum(CASE WHEN tab.art = 'storniert' THEN tab.ST else 0 END),0) as Absatz,
round(sum(CASE WHEN tab.art = 'selektiert' THEN tab.ST else 0 END) - sum(CASE WHEN tab.art = 'storniert' THEN tab.ST else 0 END),0) / tbltagebestand.Tage_Vertrieb_Gesamt AS dAT,
round((artikel.bestand / (round(sum(CASE WHEN tab.art = 'selektiert' THEN tab.ST else 0 END) - sum(CASE WHEN tab.art = 'storniert' THEN tab.ST else 0 END),0) / tbltagebestand.Tage_Vertrieb_Gesamt)),0) AS VerfTage,
getdate() + (artikel.bestand / (round(sum(CASE WHEN tab.art = 'selektiert' THEN tab.ST else 0 END) - sum(CASE WHEN tab.art = 'storniert' THEN tab.ST else 0 END),0) / tbltagebestand.Tage_Vertrieb_Gesamt)) AS VerfBis
FROM aid_artikel LEFT JOIN artikel ON aid_artikel.anr = artikel.anr LEFT JOIN tab ON aid_artikel.anr = tab.anr LEFT JOIN tbltagebestand ON aid_artikel.anr = tbltagebestand.BstNr LEFT Join lagersperrlager ON aid_artikel.aken = lagersperrlager.aken
WHERE artikel.bestand <5000000 AND aid_artikel.status = 'aktuell'
GROUP BY aid_artikel.anr
ORDER BY artikel.bedarf DESC
Wenn ich das ausführen will, kommt folgende Fehlermeldung:
Die aid_artikel.titel-Spalte ist in der Auswahlliste ungültig, da sie nicht in einer Aggregatfunktion und nicht in der GROUP BY-Klausel enthalten ist.
Warum verlangt er das von mir? Das hat es mit den gleichen Daten auf dem MYSQL auch nicht interessiert. Ich kann doch nicht alles in GROUP BY setzen, zumal da ja auch "eigens erzeugte Spalten" (quasi alle Berechnungen) dabei sind die ich ja namentlich nicht ansprechen kann... grrr