J'ai datatables suivantes
Composants
componentid title 1 houseRent 2 medical 3 Travelling Allowance
empPayrollMaster
MasterID EmployeeID SalaryMonthID 1 101 1 2 102 1 3 103 1
empPayrollDetail
DetailID MasterID ComponentID amount 1 1 1 100 2 1 2 500 3 2 1 300 4 2 3 250 5 3 1 150 6 3 2 350 7 3 3 450
Sortie requirejse
EmployeeID MasterID ComponentID amount 101 1 1 100 101 1 2 500 101 1 3 0 102 2 1 300 102 1 2 0 102 2 3 250 103 3 1 150 103 3 2 350 103 3 3 450
Pour get la sortie requirejse si je fais la jointure externe gauche entre les components
et empPayrollDetail
je reçois null
dans EmployeeID et MasterID et montant Columns. Comment modifier la jointure gauche pour get la sortie requirejse
Vous devez faire un CROSS JOIN
sur les Components
et empPayrollMaster
pour générer d'abord toutes les combinaisons d'employés et de composants. Ensuite, faites un LEFT JOIN
sur empPayrollDetail
pour get le résultat, en utilisant ISNULL(amount, 0)
pour les amount
NULL
.
SQL Fiddle
SELECT epm.EmployeeID, epm.MasterID, c.ComponentID, amount = ISNULL(epd.amount, 0) FROM empPayrollMaster epm CROSS JOIN Components c LEFT JOIN empPayrollDetail epd ON epd.MasterID = epm.MasterID AND epd.ComponentID = c.ComponentID
Essaye ça
select empPayrollMaster.EmployeeID,empPayrollMaster.MasterID, Components.componentid,isnull(empPayrollDetail.amount,0) from empPayrollMaster left join Components on empPayrollMaster.EmployeeID is not null left join empPayrollDetail on empPayrollDetail.MasterID = empPayrollMaster.MasterID and empPayrollDetail.ComponentID = Components.componentid
Essayez de cette façon
select c.EmployeeID,d.MasterID,c.ComponentID,isnull(d.amount,0) as amount from ( select * from Components a Cross join empPayrollMaster b) c left outer join empPayrollDetail d on d.componentid =c.componentid
Comme vous voulez le montant du composant pour chaque employé dans la table maître, vous devez utiliser un insull(payrole_detail.amount,0)
ou, comme @Turophile l'a souligné, la fonction standard SQL coalesce(payrole_detail.amount,0)
pour la colonne montants.
SELECT Customers.CustomerName, Orders.OrderID FROM Customers INNER JOIN Orders ON Customers.CustomerID=Orders.CustomerID ORDER BY Customers.CustomerName;