SQL过滤,在满足条件时选择特定值

时间:2016-11-15 16:53:36

标签: sql sql-server join count

也许我只是愚蠢,但出于某种原因,这是有效的,是的,它的效果很好但是我们想要添加一个带有子表的条件但是保持相同的格式。

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]你有progressId = 3和4.从现在开始,它正在计算所有类型的progressId。

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

谢谢!

1 个答案:

答案 0 :(得分:4)

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