Fragensteller
SVERWEIS für T-SQL

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
- Typ geändert Dimitar DenkovMicrosoft contingent staff, Administrator Freitag, 6. Mai 2016 07:38 Warten auf Rückmeldung
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 -
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