如何根据MAX id获得记录显示0计数

时间:2015-09-12 18:47:04

标签: sql sql-server

我想编写查询,显示记录与最大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 

2 个答案:

答案 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