Announcement

Collapse
No announcement yet.

max-Umsatz pro Kunde inkl. Vertreterdaten

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • max-Umsatz pro Kunde inkl. Vertreterdaten

    hallo,
    ich bin auf der Suche nach einer Lösung um bei Umsatzdaten die Vertreter zu ermitteln welche den höchsten Umsatz pro Kunde haben um komme nicht zum Ergebnis



    Code:
    CREATE TABLE [dbo].[_tbl_demodaten](
    	[Mandantname] [nvarchar](50) NULL,
    	[Kundenname] [nvarchar](50) NULL,
    	[Umsatz] [float] NULL,
    	[MitarbeiterID] [int] NULL,
    	[Mitarbeitername] [nvarchar](50) NULL,
    	[id] [int] IDENTITY(1,1) NOT NULL
    ) ON [PRIMARY]
    
    
    
    
    SET IDENTITY_INSERT [dbo].[_tbl_demodaten] ON;
    
    BEGIN TRANSACTION;
    INSERT INTO [dbo].[_tbl_demodaten]([Mandantname], [Kundenname], [Umsatz], [MitarbeiterID], [Mitarbeitername], [id])
    SELECT N'Mandant 1', N'Müller', 5555, 1, N'Heinz', 1 UNION ALL
    SELECT N'Mandant 1', N'Müller', 4000, 2, N'Bert', 2 UNION ALL
    SELECT N'Mandant 1', N'Meier', 7000, 2, N'Bert', 3 UNION ALL
    SELECT N'Mandant 1', N'Kunz', 2000, 1, N'Heinz', 4 UNION ALL
    SELECT N'Mandant 1', N'Kunz', 1000, 4, N'Anna', 5 UNION ALL
    SELECT N'Mandant 1', N'Müller', 8000, 4, N'Anna', 6 UNION ALL
    SELECT N'Mandant 1', N'Meier', 200, 4, N'Anna', 7
    COMMIT;
    RAISERROR (N'[dbo].[_tbl_demodaten]: Insert Batch: 1.....Done!', 10, 1) WITH NOWAIT;
    GO
    
    SET IDENTITY_INSERT [dbo].[_tbl_demodaten] OFF;



    folgendes Statement zeigt mir schon das an was ich will, allerdings fehlt mir der Name oder besser noch die ID des Mitarbeiters der den Umsatz gebracht hat

    Code:
    SELECT     Mandantname, Kundenname, MAX(Umsatz) AS maxUmsatz
    FROM         dbo._tbl_demodaten
    GROUP BY Mandantname, Kundenname
    Wie bekomme ich den Mitarbeiter noch mit rein? Einfach Subselect auf Umsatz und Kundenname oder gibts was besseres?


    Code:
    SELECT     Mandantname, Kundenname, MAX(Umsatz) AS maxUmsatz,
                              (SELECT     TOP (1) MitarbeiterID
                                FROM          dbo._tbl_demodaten
                                WHERE      (Umsatz = MAX(o.Umsatz)) AND (Kundenname = o.Kundenname)) AS MitarbeiterID
    FROM         dbo._tbl_demodaten AS o
    GROUP BY Mandantname, Kundenname

  • #2
    Code:
    Select 
    t1.Mandantname, t1.Kundenname, t1.maxUmsatz
    , t2.MitarbeiterID
    FROM 
    (
     SELECT     Mandantname, Kundenname, MAX(Umsatz) AS maxUmsatz
     FROM         dbo._tbl_demodaten
     GROUP BY Mandantname, Kundenname
    ) as t1
    INNER JOIN dbo._tbl_demodaten as t2
    on t2.Mandantname = t1.Mandantname AND t2.Kundenname = t1.Kundenname
    AND t2.Umsatz = t1.maxUmsatz
    Voraussetzung:

    jede Kombination Mandantname, Kundenname, Umsatz gibt es nur ein mal. (Eindeutige Schlüssel :-)
    Bitte vergessen Sie nicht die Antwort zu bewerten. Danke.:-)

    Comment


    • #3
      hallo,
      das sieht doch schon mal prima aus, mit deinem Vorschlag kann ich eleganter Joinen. Danke!

      Comment

      Working...
      X