我想编写查询,显示记录与最大ID现在我也想得到记录,如果它不匹配MAX id
这是我到目前为止所做的事情。
到目前为止,我能够在Laptop_ShiftDepartment中获得MAX id的记录,但我也是 如果在部门中的0计数
,则需要计数
SELECT
D.Department as Depart,
COUNT(LD.ID) AS TotalLaptops
FROM
Laptop_Departments D
left JOIN Laptop_Shift_Departments S
ON D.ID = S.Current_Dep_ID
left JOIN PO_LAPTOPDETAIL LD
ON S.Laptop_Detail_ID = LD.ID
left JOIN PO_Laptop_Master LM
ON LM.ID = LD.Laptop_Master_ID
left JOIN PO_PURCHASEORDER PO
ON PO.ID = LM.PO_ID
left JOIN Laptop_Departments cD
ON cD.ID = ld.Dept_id
WHERE S.id in (select MAX(cSD.id) from Laptop_Shift_Departments cSD GROUP BY cSD.Laptop_Detail_ID)
group by D.Department ,D.ID
答案 0 :(得分:0)
您可以使用sql“CASE语句”,如下所示
SELECT D.Department as Depart,
CASE
when S.id in (select MAX(cSD.id)
from Laptop_Shift_Departments cSD
GROUP BY cSD.Laptop_Detail_ID)
then count(LD.ID)
ELSE 0
END AS TotalLaptops
FROM Laptop_Departments D
left JOIN Laptop_Shift_Departments S ON D.ID = S.Current_Dep_ID
left JOIN PO_LAPTOPDETAIL LD ON S.Laptop_Detail_ID = LD.ID
left JOIN PO_Laptop_Master LM ON LM.ID = LD.Laptop_Master_ID
left JOIN PO_PURCHASEORDER PO ON PO.ID = LM.PO_ID
left JOIN Laptop_Departments cD ON cD.ID = ld.Dept_id
group by D.Department ,D.ID
答案 1 :(得分:0)
将where
子句移至from
子句并使用left join
:
SELECT D.Department as Depart, COUNT(LD.ID) AS TotalLaptops
FROM Laptop_Departments D left join
Laptop_Shift_Departments S
ON D.ID = S.Current_Dep_ID left join
PO_LAPTOPDETAIL LD
ON S.Laptop_Detail_ID = LD.ID left join
PO_Laptop_Master LM
ON LM.ID = LD.Laptop_Master_ID left join
PO_PURCHASEORDER PO
ON PO.ID = LM.PO_ID left join
Laptop_Departments cD
ON cD.ID = ld.Dept_id left join
(select MAX(cSD.id) as maxid
from Laptop_Shift_Departments cSD
GROUP BY cSD.Laptop_Detail_ID
) m
ON m.maxid = s.id
group by D.Department, D.ID