moestavern 10 Geschrieben 8. Juli 2010 Melden 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...
stsdwh 10 Geschrieben 8. Juli 2010 Melden 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)
moestavern 10 Geschrieben 8. Juli 2010 Autor Melden 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...???
stsdwh 10 Geschrieben 8. Juli 2010 Melden 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
moestavern 10 Geschrieben 8. Juli 2010 Autor Melden 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!
Cybquest 36 Geschrieben 8. Juli 2010 Melden 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.
moestavern 10 Geschrieben 8. Juli 2010 Autor Melden 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')
hh2000 10 Geschrieben 9. Juli 2010 Melden 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
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde dich hier an.
Jetzt anmelden