Es scheint nicht möglich zu sein, eines mit einem Format zu finden, das nahe genug ist, um eine solide Antwort zu erhalten. Versuchen Sie, sich mit ausgewählten Fallaussagen zu messen, aber es erweist sich als ein Schmerz. Ich habe eine grundlegende Gehaltsabrechnungsdatenbank, die ich aufstelle (Diagramm unten gezeigt), und die Idee ist, dass ich die folgende Aussage machen möchte, wenn die Angestelltekategorie eines Angestellten (EmpCat) 1 ist, aber eine getrennte Aussage, wenn es 2 ist (im Grunde stündlich vs Gehalt). Es ist immer noch relativ neu, sich mit T SQL zu beschäftigen, daher würde jede Hilfe sehr geschätzt werden.So erstellen Sie eine bedingte gespeicherte Prozedur
EDIT: Ich habe das Verfahren angepasst. Es sieht so aus, als ob es jetzt tun sollte, was ich will, und sollte sogar die gesamten geleisteten Arbeitsstunden im Bezahlzeitraum automatisch summieren, aber ich erhalte jetzt einen Fehler, der besagt, dass es nicht in einer Aggregatfunktion oder einer GROUP BY-Klausel enthalten ist. Probleme haben, herauszufinden, wo das ein Problem ist.
CREATE PROCEDURE NewTimesheet(
@LName varchar(50),
@FName varchar(50),
@ShiftType char(2),
@StartDate date,
@EndDate date,
@OTHours decimal(18,2),
@HolidayHours decimal(18,2)
)
AS
BEGIN
INSERT INTO tblTimesheet(
EmpID,
ShiftType,
StartDate,
EndDate,
TotalHours,
OTHours,
HolidayHours,
NetPay
)
SELECT e.EmpID, @ShiftType, @StartDate, @EndDate, SUM(HoursWorked) ,
@OTHours, @HolidayHours,
CASE WHEN ed.EmpCat = 1
THEN (SUM(HoursWorked) * PayRate)
ELSE (e.PayRate/24)
END
FROM tblEmployee e INNER JOIN tblEmployeeDetail ed ON e.EmpID = ed.EmpID
inner join tblShifts on e.EmpID = tblShifts.EmpID
WHERE [email protected] AND [email protected] AND Date > @StartDate AND Date <
@EndDate
GROUP BY e.EmpID, ed.EmpCat, e.PayRate, tblShifts.HoursWorked
END
Warum begrenzen Sie den Namen? Wäre es nicht besser, einen Batch-Lauf zu machen und alle auf einmal zu erledigen? –
machen zwei separate SELECT-Anweisung und machen den Einsatz separat, select * from tblemployee a tblemployeedetail b auf a.empid = b.empid verbinden, in dem b.empcat = 1 select * from tblemployee einem tblemployeedetail b kommen auf a.empid = b.empid wo b.empcat = 2 –