Ich möchte einen ShowRoomId
Wert an die Abfrage unten übergeben. Die Employees
Tabelle hat eine ShowRoomId
Spalte.Hinzufügen einer WHERE-Klausel in einer komplexen SQL-Abfrage
Wie kann ich es tun?
My SQL-Abfrage ist, wie folgend:
SELECT *
FROM Employees A
OUTER APPLY (SELECT TOP 1 *
FROM EmployeeBasics B
WHERE (A.EmployeeID = B.EmployeeID)
ORDER BY B.BasicUpdateDate DESC) AS B
OUTER APPLY (
SELECT C.EmployeeId , count(*) AS TotalAbsent
FROM EmployeeAbsents C
WHERE C.AbsentDate BETWEEN '2016-05-01' AND '2016-05-30' AND A.EmployeeID = C.EmployeeID
GROUP BY C.EmployeeId
) AS C
OUTER APPLY (
SELECT EmployeeId,
SUM(CASE WHEN TransctionTypeId = 1 THEN Amount ELSE 0 END) AS Payment,
SUM(CASE WHEN TransctionTypeId = 2 THEN Amount ELSE 0 END) AS RecoverSalary,
SUM(CASE WHEN TransctionTypeId = 3 THEN Amount ELSE 0 END) AS RecoverCash
FROM dbo.EmployeeAdvances D
WHERE A.EmployeeID = D.EmployeeID
GROUP BY EmployeeId
) AS D
Warum schreiben Sie jedes Wort mit Großbuchstaben? Können Sie versuchen, eine Wo-Klausel an das Ende Ihrer komplexen Abfrage hinzuzufügen? Es sollte funktionieren. –
Ja, es ist Arbeit. Vielen Dank Lieber Giorgi Nakeuri. –
BTW: Sie verwenden "OUTER APPLY" Art von unangemessen. Die erste "OUTER APPLY" ist in Ordnung; per EmployeeID erhalten Sie das neueste EmployeeBasic. Aber die anderen beiden Gruppen von EmployeeID, die überflüssig ist, weil Sie äußere durch eine EmployeeID anwenden. Entfernen Sie einfach die GROUP BY-Klauseln und die EmployeeId aus den SELECT-Klauseln. Oder ändern Sie "OUTER APPLY" in "LEFT JOIN" und verschieben Sie den EmployeeID-Vergleich in die ON-Klausel. –