Search code examples
sqlcountconditional-statements

Conditional Count on a column


If I had a table like this:

jobId, jobName, Priority

Where Priority can be an integer between 1 to 5.

Since I would need this query for generating a chart on report, I would need to display the jobid, jobname and 5 fields called Priority1, Priority2, Priority3, Priority4. Priority5.

Priority1 should count the amount of rows where priority field has the value of 1.

Priority2 should count the amount of rows where priority field has the value of 2.

Priority3 should count the amount of rows where priority field has the value of 3.

etc

How would I do that in a quick and performant manner?


Solution

  • I think you may be after

    select 
        jobID, JobName,
        sum(case when Priority = 1 then 1 else 0 end) as priority1,
        sum(case when Priority = 2 then 1 else 0 end) as priority2,
        sum(case when Priority = 3 then 1 else 0 end) as priority3,
        sum(case when Priority = 4 then 1 else 0 end) as priority4,
        sum(case when Priority = 5 then 1 else 0 end) as priority5
    from
        Jobs
    group by 
        jobID, JobName
    

    However I am uncertain if you need to the jobID and JobName in your results if so remove them and remove the group by,