CREATE OR ALTER PROCEDURE [dbo].[Sp_HazardFactor_Statistics] @year NVARCHAR(20)=NULL, @month NVARCHAR(20)=NULL, @unitId NVARCHAR(200)=NULL, @projectId NVARCHAR(200)=NULL AS BEGIN SET NOCOUNT ON; WITH CTE AS ( SELECT ROW_NUMBER() OVER ( PARTITION BY tba.Year,tba.Month,tba.WorkPlace,tba.JobStep,tba.Hazard,tba.Consequence,tba.Illegality, tba.BaseRiskSeverity,tba.BaseRiskProbability,tba.BaseRiskScore,tba.BaseRiskLevel,tba.BaseRiskAcceptabity, tba.NetRiskControlMeasures,tba.NetRiskSeverity,tba.NetRiskProbability,tba.NetRiskScore,tba.NetRiskLevel, tba.NetRiskAcceptabity,tba.AdditionalControlMeasures ORDER BY CompileDate desc ) as rn, --tbb.ProjectName, tba.BaseRiskLevel FROM HazardFactor_Safety AS tba WITH(NOLOCK) --LEFT JOIN Base_Project AS tbb WITH(NOLOCK) ON tbb.ProjectId = tba.ProjectId WHERE 1=1 AND tba.State = 1 AND tba.Year = @year AND tba.Month = @month --单位条件:@unitId为空查所有,有值则过滤单位 AND (@unitId IS NULL OR @unitId = '' OR tba.UnitId = @unitId) --项目条件:为空不过滤 AND (@projectId IS NULL OR @projectId = '' OR tba.ProjectId = @projectId) ) SELECT BaseRiskLevel AS Title,COUNT(1) AS Num FROM CTE WHERE rn = 1 GROUP BY BaseRiskLevel END