Karen
Karen

Reputation: 157

SQL How to create a value for a new column based on the count of an existing column by groups?

I have a temp table that I'm reading from, and I want to look at one of the columns that only has two grade values - either a 3 or a 4 and build two new columns - one that holds the count of the 3's and the other to hold the count of the 4's - by a particular grouping. My code looks like this.

Select Max(Counting) as Total
, student
, stdType
, Score3 = (SELECT count(*) from #tempBWMSHonors3 where score = '3')
, Score4 = (SELECT count(*) from #tempBWMSHonors3 where score = '4')
from #tempBWMSHonors3
group by student, stateID, grade, stdType

I also embedded an image that show an example of my temp table and what I'm trying to achieve (as well as the result I am getting - but don't want). [enter image description here]

Upvotes: 3

Views: 4908

Answers (1)

Gordon Linoff
Gordon Linoff

Reputation: 1270391

I think you just want conditional aggregation, not subqueries:

select Max(Counting) as Total, student, stdType,
       sum(case when score = '3' then 1 else 0 end) as Score3,
       sum(case when score = '4' then 1 else 0 end) as Score4
from #tempBWMSHonors3
group by student, stdType;

Note: if score is a number and not a string, then you should not use single quotes for the constant.

Upvotes: 4

Related Questions