My table
x
ID catone cattwo
100 2 1
100 3 1
200 1 2
expect result (count not sum)
ID totalcat1 totalcat2
100 2 2
200 1 1
My query
select COUNT(*) as totalcat1, catone
from Table1
group by cat1
left join
select COUNT(*) as totalcat2, cattwo
from Table1
group by cattwo
Try to have both count columns catone and cattwo
Not sure how to correct it. Thank you
Advertisement
Answer
A simple group-by should do it
select ID, COUNT(catone) as totalcat1, COUNT(cattwo) as totalcat2
from Table1
group by ID;
Note that this simply counts the number of values that are not NULL. If your original data was this…
ID catone cattwo
100 2 1
100 3 1
100 4 NULL
… then the result would be
ID totalcat1 totalcat2
100 3 2
If you want to count the distinct values – so totalcat2 would be 1 (as only 1 value exists in that column, although it’s there twice) you could use
select ID, COUNT(DISTINCT catone) as totalcat1, COUNT(DISTINCT cattwo) as totalcat2
from Table1
group by ID;
which would return totalcat1 = 3 and totalcat2 = 1.
Here’s a db<>fiddle with the two options.
Here’s a second db<>fiddle on request of OP with ID 200.