2016-11-15 30 views
0

也许我只是愚蠢的,但由于某种原因,这是工作和是的,它工作很好,但我们想添加一个子表的条件,但维护相同的格式。SQL过滤,当条件满足时选择具体的值计数

BEGIN

SELECT 
     v.[id] 
     ,v.[Vacante] 
     ,v.[deptoId] 
     ,v.[StatusId] 
     ,v.[scholarYearId] 
     ,v.[tipoVacanteId] 
     ,v.[detalle]     
     ,v.[createdDate] 
     ,v.[createdBy] 
     ,d.nombre as DeptoNombre 
     ,s.nombre as statusNombre 
     ,y.nombre as scholarYearNombre 
     ,t.nombre as tipoVacanteNombre 
     ,count(uv.id) as totalCandidatos 
FROM 
     [dbo].[tbl_vacantes] v 
LEFT JOIN 
     tbl_usuariosPorVacante uv on v.id = uv.vacanteId 
--LEFT JOIN 
--  dbo.[tbl_user] u on uv.userId=u.id 
INNER JOIN 
     dbo.[tbl_depto] d ON d.Id = v.[deptoId] 
INNER JOIN 
     dbo.[tbl_status] s ON s.Id = v.[statusId] 
LEFT JOIN 
     tbl_scholarYear y ON v.scholarYearId=y.Id 
LEFT JOIN 
     tbl_tipoVacante t ON v.tipoVacanteId=t.Id       
--WHERE 
-- u.progressId =3 OR u.progressId is null --Solo usuarios que ya temrinaron su proceso.   
GROUP BY 
     v.[id] 
     ,v.[Vacante] 
     ,v.[deptoId] 
     ,v.[StatusId] 
     ,v.[scholarYearId] 
     ,v.[tipoVacanteId] 
     ,v.[detalle]       
     ,v.[createdDate] 
     ,v.[createdBy] 
     ,d.nombre 
     ,s.nombre 
     ,y.nombre 
     ,t.nombre 
ORDER BY 
     v.id DESC 

END

我们想要做什么,是在totalCandidatos(计数)保持计数,是的,但只能算时DBO。[tbl_user] U具有progressId = 3 4.从现在开始,它正在计算所有的进展情况。

我知道,它可能是愚蠢的。但我坚持在这一个。

谢谢!

+1

'其中tbl_user(3,4)' – scsimon

+0

是否要排除非3/4行或包含但计数为0? –

+0

我想只接受count(),那些tbl_user.progressID = 4或3.不是整个Universe。 –

回答

4

您可以使用sum(case when <condition> then 1 else 0 end)来计算返回符合特定条件的记录数。

+0

事实上的mattter,我这样做,但它仅仅是返回0。 左加入 tbl_user U ON uv.userId = u.id ------>末的加入 和instad count .... sum(u.progressId = 3)然后1 else 0 end)作为totalCandidatos ....所有我得到的是0 –

+0

工程就像一个魅力! –