none
SVERWEIS für T-SQL RRS feed

  • Allgemeine Diskussion

  • Hallo, NG, 

    mir ist natürlich bekannt, dass man den den S-VERWEIS in SQL über eine simple Tabellenverknüpfung hinbekommt, allerdings nur, wenn "Genaue Übereinstimmung" gefordert wird. Beim Problem Provisionsabrechnung - ein typischer Fall für den SVERWEIS - wird explizit KEINE genaue Übereinstimmung gefordert, sondern es wird ausgehend von einem Suchkriterium die nächst niedrigere Zahl zurückgegeben. Gibt es da eine Möglichkeit in SQL, das abzubilden?

    Gruß

    Susanne

    Freitag, 29. April 2016 09:32

Alle Antworten

  • Hallo Susanne,

    poste doch bitte deine Tabellenstrukturen als CREATE TABLE Statements, einige Beispieldaten als INSERT INTO Statements und dazu bitte das gewünschte Ergebnis in Tabellenform.

    Genereller Hinweis: JOIN ist nicht auf direkte Vergleiche beschränkt, Du kannst dort auch mit >, <, BETWEEN, Subqueries, usw. arbeiten.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Freitag, 29. April 2016 10:39
    Moderator
  • Hallo, Stefan,

    nachstehend die T-SQL-Statements. Wäre super, wenn jemand eine Lösung wüßte. D. h. wenn der Umsatz unter 100% liegt, soll die Basis-Provision gelten, wenn darüber, soll der jeweils erreichte Satz gelten, also z. B. 105,5% erreicht, dann zieht der Satz für 105%.

    Gruß 

    Susanne

    CREATE TABLE [dbo].[Provisionsstaffel](
    [VB_Nummer] [float] NULL,
    [Name] [nvarchar](255) NULL,
    [Provisionsstaffel] [float] NULL,
    [Provisionssatz] [float] NULL
    ) ON [PRIMARY];
    GO

    CREATE TABLE [dbo].[Zielvereinbarung](
    [VB_Nummer] [float] NULL,
    [Mitarbeiter] [nvarchar](255) NULL,
    [Umsatzsumme_aktuell] [money] NULL,
    [Zielvereinbarung] [money] NULL,
    [Zielerreichung] [float] NULL
    ) ON [PRIMARY]

    GO



    INSERT INTO [dbo].[Zielvereinbarung] 
    ([VB_Nummer] ,[Mitarbeiter] ,[Umsatzsumme_aktuell] ,[Zielvereinbarung] ,[Zielerreichung])
         VALUES           (33, 'Meier',3000033.00,2784934.00,1.0772366598274)
    GO
    INSERT INTO [dbo].[Zielvereinbarung] 
    ([VB_Nummer] ,[Mitarbeiter] ,[Umsatzsumme_aktuell] ,[Zielvereinbarung] ,[Zielerreichung])
         VALUES           (34,'Müller',1009437.00,1386314.00,0.728144561765949)
    GO
    INSERT INTO [dbo].[Zielvereinbarung] 
    ([VB_Nummer] ,[Mitarbeiter] ,[Umsatzsumme_aktuell] ,[Zielvereinbarung] ,[Zielerreichung])
         VALUES            (35,'Schmidt',6774871.00,3599347.00,1.88225003035273)
    GO

    INSERT INTO Provisionsstaffel
    (VB_Nummer, Name, Provisionssatz, Provisionsstaffel) 
     VALUES(33,'Meier',0.0,04)
    GO
    INSERT INTO Provisionsstaffel
    (VB_Nummer, Name, Provisionssatz, Provisionsstaffel) 
     VALUES(33,'Meier',1.01,0.0533333333333333)
    GO
    INSERT INTO Provisionsstaffel
    (VB_Nummer, Name, Provisionssatz, Provisionsstaffel) 
     VALUES(33,'Meier',1.02,0.0533333333333333)
    GO
    INSERT INTO Provisionsstaffel
    (VB_Nummer, Name, Provisionssatz, Provisionsstaffel) 
     VALUES(33,'Meier',1.03,0.0533333333333333)
    GO
    INSERT INTO Provisionsstaffel
    (VB_Nummer, Name, Provisionssatz, Provisionsstaffel) 
     VALUES(33,'Meier',1.04,0.0533333333333333)
    GO
    INSERT INTO Provisionsstaffel
    (VB_Nummer, Name, Provisionssatz, Provisionsstaffel) 
     VALUES(33,'Meier',1.05,0.0666666666666667)
    GO
    INSERT INTO Provisionsstaffel
    (VB_Nummer, Name, Provisionssatz, Provisionsstaffel) 
     VALUES(33,'Meier',1.06,0.0666666666666667)
    GO
    INSERT INTO Provisionsstaffel
    (VB_Nummer, Name, Provisionssatz, Provisionsstaffel) 
     VALUES(33,'Meier',1.07,0.08)
    GO
    INSERT INTO Provisionsstaffel
    (VB_Nummer, Name, Provisionssatz, Provisionsstaffel) 
     VALUES(33,'Meier',1.08,0.08)
    GO
    INSERT INTO Provisionsstaffel
    (VB_Nummer, Name, Provisionssatz, Provisionsstaffel) 
     VALUES(33,'Meier',1.09,0.106666666666667)
    GO
    INSERT INTO Provisionsstaffel
    (VB_Nummer, Name, Provisionssatz, Provisionsstaffel) 
     VALUES(33,'Meier',1.1,0.106666666666667)
    GO
    INSERT INTO Provisionsstaffel
    (VB_Nummer, Name, Provisionssatz, Provisionsstaffel) 
     VALUES(33,'Meier',1.11,0.12)
    GO
    INSERT INTO Provisionsstaffel
    (VB_Nummer, Name, Provisionssatz, Provisionsstaffel) 
     VALUES(34,'Müller',0.0,0266666666666667)
    GO
    INSERT INTO Provisionsstaffel
    (VB_Nummer, Name, Provisionssatz, Provisionsstaffel) 
     VALUES(34,'Müller',1.01,0.0266666666666667)
    GO
    INSERT INTO Provisionsstaffel
    (VB_Nummer, Name, Provisionssatz, Provisionsstaffel) 
     VALUES(34,'Müller',1.02,0.04)
    GO
    INSERT INTO Provisionsstaffel
    (VB_Nummer, Name, Provisionssatz, Provisionsstaffel) 
     VALUES(34,'Müller',1.03,0.04)
    GO
    INSERT INTO Provisionsstaffel
    (VB_Nummer, Name, Provisionssatz, Provisionsstaffel) 
     VALUES(34,'Müller',1.04,0.0666666666666667)
    GO
    INSERT INTO Provisionsstaffel
    (VB_Nummer, Name, Provisionssatz, Provisionsstaffel) 
     VALUES(34,'Müller',1.05,0.106666666666667)
    GO
    INSERT INTO Provisionsstaffel
    (VB_Nummer, Name, Provisionssatz, Provisionsstaffel) 
     VALUES(34,'Müller',1.06,0.12)
    GO
    INSERT INTO Provisionsstaffel
    (VB_Nummer, Name, Provisionssatz, Provisionsstaffel) 
     VALUES(35,'Schmidt',1.01,0.04)
    GO
    INSERT INTO Provisionsstaffel
    (VB_Nummer, Name, Provisionssatz, Provisionsstaffel) 
     VALUES(35,'Schmidt',1.02,0.0533333333333333)
    GO
    INSERT INTO Provisionsstaffel
    (VB_Nummer, Name, Provisionssatz, Provisionsstaffel) 
     VALUES(35,'Schmidt',1.03,0.0533333333333333)
    GO
    INSERT INTO Provisionsstaffel
    (VB_Nummer, Name, Provisionssatz, Provisionsstaffel) 
     VALUES(35,'Schmidt',1.04,0.0666666666666667)
    GO
    INSERT INTO Provisionsstaffel
    (VB_Nummer, Name, Provisionssatz, Provisionsstaffel) 
     VALUES(35,'Schmidt',1.05,0.08)
    GO
    INSERT INTO Provisionsstaffel
    (VB_Nummer, Name, Provisionssatz, Provisionsstaffel) 
     VALUES(35,'Schmidt',1.06,0.0933333333333333)
    GO
    INSERT INTO Provisionsstaffel
    (VB_Nummer, Name, Provisionssatz, Provisionsstaffel) 
     VALUES(35,'Schmidt',1.07,0.12)
    GO
    INSERT INTO Provisionsstaffel
    (VB_Nummer, Name, Provisionssatz, Provisionsstaffel) 
     VALUES(35,'Schmidt',1.08,0.133333333333333)
    GO
    INSERT INTO Provisionsstaffel
    (VB_Nummer, Name, Provisionssatz, Provisionsstaffel) 
     VALUES(35,'Schmidt',1.09,0.133333333333333)
    GO


    Samstag, 30. April 2016 12:48
  • Hallo Susanne,#

    das lässt u.a. über die Fensterfunktion und mit TOP(1) ... ORDER BY hinkriegen.

    Für eine genauere Antwort  bräuchte man allerdings mehr, siehe Stefans Antwort.

    Gruß Elmar

    Samstag, 30. April 2016 13:06
    Beantworter
  • Hallo, Elmar,

    wieso, ich habe doch ungefähr einen Meter Code gepostet.

    Gruß

    Susanne

    Montag, 2. Mai 2016 11:12
  • Hallo Susanne,

    das dürfte sich zeitlich überschnitten haben... Ich schaue es mir mal an.

    Gruß Elmar

    Montag, 2. Mai 2016 13:08
    Beantworter