Benutzer mit den meisten Antworten
Teil-Summenbildung über mehrere Felder

Frage
-
Ich muss Summen bilden und zwar je Mitarbeiter im Monat (in diesem Beispiel immer derselbe)
pro Projekt, Lohnart und Kostenstelle
Es sollte also in Etwa sowas bei rauskommen
MITARBEITER, PROJEKT, LOHNART, Kostenstelle, Gesamtstunden/je Monat
Dietrich 10063, 030.., 124 16
Dietrich, 9999, 035.., 2
Dietrich, 10824, 031.., 126 6
Dietrich, 10824/01, 030.., 126 5
Ich habe schon rumexperimentier mit GROUP BY, bin aber zu keinem Ergebnis gekommen dass mich dem Ziel näher bringt
Hier mal Scripte für Tabelle und Daten
-- Tabelle erstellen CREATE TABLE [dbo].[STZ_Nachweis]( [id] [int] IDENTITY(1,1) NOT NULL, [Datum] [date] NOT NULL, [Projekt] [nchar](15) NULL, [Lohnart] [nchar](30) NOT NULL, [Kst] [nchar](30) NOT NULL, [Ueberst] [float] NULL, [NormalStd] [float] NULL, [Bemerkung] [nchar](50) NULL, [Mitarbeiter] [nchar](25) NULL, [Pos] [float] NULL ) ON [PRIMARY] -- Daten einfügen SET NOCOUNT ON; SET XACT_ABORT ON; GO SET IDENTITY_INSERT [dbo].[STZ_Nachweis] ON; BEGIN TRANSACTION; INSERT INTO [dbo].[STZ_Nachweis]([id], [Datum], [Projekt], [Lohnart], [Kst], [Ueberst], [NormalStd], [Bemerkung], [Mitarbeiter], [Pos]) SELECT 1, '20130801 00:00:00.000', N'10063 ', N'030 Auftragsstd. ', N'124 ', NULL, 8, N'autoCad Zeichnung gefertigt ', N'Dietrich ', 1 UNION ALL SELECT 2, '20130802 00:00:00.000', N'10063 ', N'030 Auftragsstd. ', N'124 ', NULL, 8, N'Kundenbesuch ', N'Dietrich ', 1 UNION ALL SELECT 3, '20130802 00:00:00.000', N'9999 ', N'035 Überstd.o.We ', N' ', 2, NULL, N'Nachkalkulation ', N'Dietrich ', 2 UNION ALL SELECT 4, '20130803 00:00:00.000', N'10824 ', N'031 Angebotsstd. ', N'126 ', NULL, 6, N'Vertragsverhandlungen ', N'Dietrich ', 1 UNION ALL SELECT 5, '20130809 00:00:00.000', N'10824/01 ', N'031 Angebotsstd. ', N'126 ', NULL, 5, NULL, N'Dietrich ', NULL COMMIT; RAISERROR (N'[dbo].[STZ_Nachweis]: Insert Batch: 1.....Done!', 10, 1) WITH NOWAIT; GO SET IDENTITY_INSERT [dbo].[STZ_Nachweis] OFF; Select * from STZ_Nachweis
Ich wär echt für Hilfe dankbar...
Gruß
Heiko
Antworten
-
Hallo Heiko,
wenn Du nicht was vergessen hast, was es komplizierter macht, wäre es:
SELECT Mitarbeiter, MONTH([Datum]) AS Monat, Projekt, Lohnart, Kst, SUM(ISNULL([NormalStd], 0) + ISNULL([Ueberst], 0)) AS Summe FROM STZ_Nachweis GROUP BY Mitarbeiter, MONTH([Datum]), Projekt, Lohnart, Kst;
(bei jahresüberspannenden Daten käme noch ein YEAR hinzu).
Gruß Elmar
- Als Antwort vorgeschlagen Olaf HelperMVP Sonntag, 1. September 2013 07:39
- Als Antwort markiert Ionut DumaModerator Freitag, 6. September 2013 09:55
Alle Antworten
-
Hallo Heiko,
wenn Du nicht was vergessen hast, was es komplizierter macht, wäre es:
SELECT Mitarbeiter, MONTH([Datum]) AS Monat, Projekt, Lohnart, Kst, SUM(ISNULL([NormalStd], 0) + ISNULL([Ueberst], 0)) AS Summe FROM STZ_Nachweis GROUP BY Mitarbeiter, MONTH([Datum]), Projekt, Lohnart, Kst;
(bei jahresüberspannenden Daten käme noch ein YEAR hinzu).
Gruß Elmar
- Als Antwort vorgeschlagen Olaf HelperMVP Sonntag, 1. September 2013 07:39
- Als Antwort markiert Ionut DumaModerator Freitag, 6. September 2013 09:55
-
Danke an Elmar, das war die Lösung.
@Olaf: wie muss denn das Statement aussehen, wenn ich - was ja gefordert ist - nur über den Monat des aktuellen Jahres saldiert werden soll:
SELECT Mitarbeiter, YEAR([Datum]), MONTH([Datum]) AS Monat, Projekt, Lohnart, Kst, SUM(ISNULL([NormalStd], 0) + ISNULL([Ueberst], 0)) AS Summe FROM STZ_Nachweis GROUP BY Mitarbeiter, YEAR([Datum]),MONTH([Datum]), Projekt, Lohnart, Kst; Where YEAR([Datum]) = year(now( ))
???
Ist aus dem Gedächtnis heraus und ungetestet da ich grad keine Management Konsole parat habe...
Gruß und Danke für die Hilfe
Heiko
-
-
Hallo,
eine Abfrage auf den aktuellen Monat wäre:
SELECT Mitarbeiter, YEAR([Datum]), MONTH([Datum]) AS Monat, Projekt, Lohnart, Kst, SUM(ISNULL([NormalStd], 0) + ISNULL([Ueberst], 0)) AS Summe FROM STZ_Nachweis WHERE -- Monatsanfang [Datum] >= DATEADD(MONTH, DATEDIFF(MONTH,'19000101',GETDATE()), '19000101') -- Monatsende (SQL Server 2012 auch EOMONTH) AND [Datum] <= DATEADD(DAY,-1,DATEADD(MONTH,0,DATEADD(MONTH,DATEDIFF(MONTH,'19000101',GETDATE())+1,'19000101'))) GROUP BY Mitarbeiter, YEAR([Datum]), MONTH([Datum]), Projekt, Lohnart, Kst;
Wobei man i. a. eine Funktion für gängige Berechnungen wie Monatsanfang, -ende verwenden sollte - wird übersichtlicher und verständlicher.
Ggf. solltest Du ein Prozedur verwenden so dass Du den angezeigten Monat frei bestimmen kannst, da man solche Auswertungen oftmals für unterschiedliche Monate / Bereiche braucht.
Gruß Elmar
- Bearbeitet Elmar BoyeEditor Montag, 2. September 2013 08:31 @ zuviel
-
Hallo Heiko,
Ich gehe davon aus dass die Antwort von Elmar Dir weitergeholfen hat. Wenn Du noch Rueckfragen hast kannst Du sie hier posten.
Gruss,
Ionut
Ionut Duma, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip„Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.
-
Hallo an alle
Ja, wie schon gepostet hat mir Elmars Hinweis geholfen. Leider scheint die Funktion "Als Antwort markieren" nicht mit allen Browsern zu funktionieren, denn ich habe Elmars Post als Antwort markiert. Trotzdem Danke für den Hinweis wie für die Hilfe.
Gruß
Heiko