Reputation: 11
How can I use the count case when to be condition of an sql query to search.
SELECT Branches.name AS Branches_name, Branches.code AS Branches__code ,
(COUNT(CASE WHEN products_carried_per_branches.carried = 1 THEN 1 END )) AS carried ,
(COUNT(CASE WHEN products_carried_per_branches.carried = 0 THEN 1 END )) AS unCarried
FROM branches INNER JOIN products_carried_per_branches ON (products_carried_per_branches.company_id = branches.company_id
AND products_carried_per_branches.branch_code = branches.code )
WHERE (
Branches.company_id =200017
AND Branches.deleted =0
AND products_carried_per_branches.deleted =0`
AND (COUNT(CASE WHEN products_carried_per_branches.carried = 1 THEN 1 END )) = 35
GROUP BY code
this is what i got so far but. but this got an "invalid use of group function" sql error. I hope someone can help me here. I also have stumbled the having statement but prefer not to use it because I want to use this code as a search in a datatable.
Upvotes: 1
Views: 42
Reputation: 411
You would want to add a having clause as a count is an aggregate function. So your code would be
SELECT
Branches.name AS Branches_name,
Branches.code AS Branches__code ,
(COUNT(CASE WHEN products_carried_per_branches.carried = 1 THEN 1 END )) AS carried, (COUNT(CASE WHEN products_carried_per_branches.carried = 0 THEN 1 END )) AS unCarried
FROM
branches INNER JOIN products_carried_per_branches ON (products_carried_per_branches.company_id = branches.company_id AND products_carried_per_branches.branch_code = branches.code ) WHERE ( Branches.company_id =200017 AND Branches.deleted =0 AND products_carried_per_branches.deleted =0
GROUP BY code
Having (COUNT(CASE WHEN products_carried_per_branches.carried = 1 THEN 1 END )) = 35
Upvotes: 1