moestavern 10 Geschrieben 8. Juli 2010 Melden Teilen Geschrieben 8. Juli 2010 Moin, Moin... Kann jemand bei folgender Problemstellung mit einer Abfrage helfen? Ausgangsituation ist eine Tabelle diesen Daten: Artikel Periode Menge a 2009001 10 a 2009003 15 a 2010001 20 a 2010007 30 b 2009001 10 b 2010008 20 Als Ergebnis müsste kommen: Artikel Vorjahr Jahr a 25 50 b 10 20 Insgesamt können bis zu 15 Perioden vorkommen, bspw. 2009015, 2010015 Ist dies so möglich? Beste Grüße... Zitieren Link zu diesem Kommentar
stsdwh 10 Geschrieben 8. Juli 2010 Melden Teilen Geschrieben 8. Juli 2010 Versuch mal nach dem Schema SELECT Artikel, Vorjahr, SUM (Menge)FROM Tabelle GROUP BY Artikel (Ohne das jetzt selbst testen zu können) Zitieren Link zu diesem Kommentar
moestavern 10 Geschrieben 8. Juli 2010 Autor Melden Teilen Geschrieben 8. Juli 2010 Das wird so nicht funktionieren. Ich brauch ja die Summen für die einzelnen Jahre aus den Perioden (die ersten vier Stellen). Gegeben sind die Spalten Artikel, Periode, Menge. Müsste ich vielleicht aus der Spalte Periode eine weitere Spalte Jahr generieren? Sprich, mit den ersten vier Stellen der Spalte Periode...??? Zitieren Link zu diesem Kommentar
stsdwh 10 Geschrieben 8. Juli 2010 Melden Teilen Geschrieben 8. Juli 2010 Ah, verdammt. Das hatte ich übersehen. Ja die Periode musst du sicherlich erstmal aufschlüsseln. EDIT: Quelltext war ja gar nicht SQL :-D Zitieren Link zu diesem Kommentar
moestavern 10 Geschrieben 8. Juli 2010 Autor Melden Teilen Geschrieben 8. Juli 2010 Ah, verdammt. Das hatte ich übersehen. Ja die Periode musst du sicherlich erstmal aufschlüsseln. EDIT: Quelltext war ja gar nicht SQL :-D Trotzdem, Danke! Zitieren Link zu diesem Kommentar
Cybquest 36 Geschrieben 8. Juli 2010 Melden Teilen Geschrieben 8. Juli 2010 In Access würde das als Kreuztabellenabfrage ungefähr so aussehen: TRANSFORM Sum(Tabelle1.Menge) AS SummevonMenge SELECT Tabelle1.Artikel FROM Tabelle1 GROUP BY Tabelle1.Artikel PIVOT Left([Periode],4); Dann sind die ersten 4 Zeichen de Periode quasi die Spaltenüberschriften. Zitieren Link zu diesem Kommentar
moestavern 10 Geschrieben 8. Juli 2010 Autor Melden Teilen Geschrieben 8. Juli 2010 In Access würde das als Kreuztabellenabfrage ungefähr so aussehen: TRANSFORM Sum(Tabelle1.Menge) AS SummevonMenge SELECT Tabelle1.Artikel FROM Tabelle1 GROUP BY Tabelle1.Artikel PIVOT Left([Periode],4); Dann sind die ersten 4 Zeichen de Periode quasi die Spaltenüberschriften. Danke! Habe es so umgesetzt: SELECT Artikel, LEFT(Periode, 4) AS Jahr, SUM(Menge) AS [summe Menge] FROM dbo.Tabelle GROUP BY Artikel, LEFT(Periode, 4), Menge HAVING (Menge > 0.000) AND (LEFT(Periode, 4) = '2009') Zitieren Link zu diesem Kommentar
hh2000 10 Geschrieben 9. Juli 2010 Melden Teilen Geschrieben 9. Juli 2010 Moin, noch ein kleiner Tipp, versuch soviel Daten wie möglich schon im "WHERE" statt im "HAVING" einzugrenzen, das bringt bei größeren Datenmengen bessere Performance (wenn SQL >2000 das nicht sowieso von allein optimiert). Warum gruppiert Du nach Menge? Da möchtest Du doch die Summe bekommen. Oder habe ich hier etwas übersehen? z.B.: SELECT Artikel, LEFT(Periode, 4) AS Jahr, SUM(Menge) AS [summe Menge] FROM dbo.Tabelle WHERE (Menge > 0.000) AND (LEFT(Periode, 4) = '2009') GROUP BY Artikel, LEFT(Periode, 4) Gruß Kai Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.