Brauche Hilfe bei einer speziellen Abfrage T-SQL

the-dragonlord

Grünschnabel
Hallo zusammen,

ich mache mir gerade eine Abfrage im SQL-Server Managment Studio, um eine Verbrauchsstatistik aus unserem ERP System zu bekommen. Leider komme ich nicht wirklich weiter.

In einer Tabelle "lagerbewegungen" werden sämtliche Lager Zugänge und Abgänge protokolliert. Aus dieser Tabelle möchte ich eine Statistik ausgegeben bekommen die wie folgt aussieht.

Artikel | Jahr | Monat | Abgänge | Zugänge
Pro08n | 2010 | Januar | 5200.50 | 5461.00
Pro08n | 2010 | Februar | 6558.62 | 6025.00
Pro08n | 2010 | März | 6097.80 | 6591.00
Pro08n | 2010 | April | 8909.16 | 8011.98
Pro08n | 2010 | Mai | 5312.14 | 5460.00
Pro08n | 2010 | Juni | 5728.14 | 6825.00
Pro08n | 2010 | Juli | 4251.02 | 2730.00
Pro08n | 2010 | August | 5761.53 | 6999.00
Pro08n | 2010 | September | 6467.30 | 6370.00
Pro08n | 2010 | Oktober | 9840.13 | 10921.10
Pro08n | 2010 | November | 2772.94 | 3640.00
Pro06n | 2010 | Januar | 5200.50 | 5461.00
Pro06n | 2010 | Februar | 6558.62 | 6025.00
Pro06n | 2010 | März | 6097.80 | 6591.00
Pro06n | 2010 | April | 8909.16 | 8011.98
Pro06n | 2010 | Mai | 5312.14 | 5460.00
Pro06n | 2010 | Juni | 5728.14 | 6825.00
Pro06n | 2010 | Juli | 4251.02 | 2730.00
Pro06n | 2010 | August | 5761.53 | 6999.00
Pro06n | 2010 | September | 6467.30 | 6370.00
Pro06n | 2010 | Oktober | 9840.13 | 10921.10
Pro06n | 2010 | November | 2772.94 | 3640.00
Pro14n | 2010 | Januar | 5200.50 | 5461.00
Pro14n | 2010 | Februar | 6558.62 | 6025.00
Pro14n | 2010 | März | 6097.80 | 6591.00
Pro14n | 2010 | April | 8909.16 | 8011.98
Pro14n | 2010 | Mai | 5312.14 | 5460.00
Pro14n | 2010 | Juni | 5728.14 | 6825.00
Pro14n | 2010 | Juli | 4251.02 | 2730.00
Pro14n | 2010 | August | 5761.53 | 6999.00
Pro14n | 2010 | September | 6467.30 | 6370.00
Pro14n | 2010 | Oktober | 9840.13 | 10921.10
Pro14n | 2010 | November | 2772.94 | 3640.00


Die Tabelle "lagerbewegungen" hat folgende Spalten:

Artikel | Menge | Datum

Die Zu- und Abgänge underscheiden sich nur durch ein Minus vor der Zahl.
Ein Teilabfrage hab ich schon hin bekommen, aber am Rest verzweifel ich.....



Abfrage für Abgänge:

select DATENAME(MONTH, datum) as Monat, Abgang=sum(Menge)*-1
from lagerbewegungen
where datum >= '01.01.2010' and datum <= '31.12.2010' and artikel = 'pro08n' and menge like '-%'
GROUP BY DATENAME(MONTH, datum)
order by max(MONTH(datum))


Hoffe ihr könnt mir helfen.

Gruß und Danke im vorraus
 
Ich würds mal so machen, aber das geht vielleicht schöner:
SQL:
select tt.artikel, YEAR(tt.datum) as jahr, DATENAME(month, tt.datum) as monat, sum(tt.abgang) as abgänge, sum(tt.zugang) as zugänge
from (
     select artikel, datum, menge*-1 as abgang, 0 as zugang
     from lagerbewegungen
     where menge < 0
     union
     select artikel, datum, 0 as abgang, menge as zugang
     from lagerbewegungen
     where menge > 0
) as tt
where
     tt.datum >= '01.01.2010' and
     tt.datum <= '31.12.2010' and
     tt.artikel = 'pro08n'
group by tt.artikel, YEAR(tt.datum), DATENAME(month, tt.datum)
 
Zuletzt bearbeitet:
ein wenig kompliziert. Eine Kombination von SUM, IF und SIGN

Hier ein Beispiel über alle Daten. Das where kreigst du selber hin
SQL:
SELECT
	artikel,
	YEAR(datum) AS jahr,
	MONTH(datum) AS monat,
	SUM(IF(SIGN(menge) = 1, menge, 0)) AS zugang, 
	SUM(IF(SIGN(menge) = -1, menge, 0)) AS abgang, 
FROM
	myTabale
GROUP BY
	artikel,
	YEAR(datum) AS jahr,
	MONTH(datum) AS monat
Wenn du auch die Monate haben willst, welche keine Werte haben, dann solltest du das ganze über den Monat mit einem LEFT JOIN an eine Monatstabelle anbinden
 
Zuletzt bearbeitet von einem Moderator:
Danke ich bin nur MySQL gewohnt und wusste nicht was T-SQL alles für Funktionen beherrscht.
Deshalb die umständliche Version.
 
Zurück