Return results ordered by count sort results from a select SQL Query

I have a webapp..

A User clicks on a US State on a map, the State represents a two digit abbreviation of the state they clicked. In the database there are 1000's of locations each one has a two digit state abriviation that indicates what state they are from.

It is easy to return a list of locations by state
(Select * from Database where State = "Clicked State" Order By Whatever)

What I need is more complicated than that...each location entry has 10 columns (Product1 to Product10) and if that location has the product in stock, it has a "Y" in that field.

I need to return a list ordered by which location has the most "Y". So the users would be shown who has the most products in stock.

select * from locations
order by
(case when product1='Y' then 1 else 0 end +
case when product2='Y' then 1 else 0 end +
case when product3='Y' then 1 else 0 end +
case when product4='Y' then 1 else 0 end +
case when product5='Y' then 1 else 0 end +
case when product6='Y' then 1 else 0 end +
case when product7='Y' then 1 else 0 end +
case when product8='Y' then 1 else 0 end +
case when product9='Y' then 1 else 0 end +
case when product10 = 'Y' then 1 else 0 end
)

the above sorts from least 'Y' count to most
or, to do sort from most Y to least....

select * from locations
order by
(case when product1='Y' then 1 else 0 end +
case when product2='Y' then 1 else 0 end +
case when product3='Y' then 1 else 0 end +
case when product4='Y' then 1 else 0 end +
case when product5='Y' then 1 else 0 end +
case when product6='Y' then 1 else 0 end +
case when product7='Y' then 1 else 0 end +
case when product8='Y' then 1 else 0 end +
case when product9='Y' then 1 else 0 end +
case when product10 = 'Y' then 1 else 0 end
) desc

select * from (select *,case when Product1='Y' then 1 else 0 end + case when Product2='Y' then 1 else 0 end + case when Product3='Y' then 1 else 0 end + case when Product4='Y' then 1 else 0 end + case when Product5='Y' then 1 else 0 end + case when Product6='Y' then 1 else 0 end + case when Product7='Y' then 1 else 0 end + case when Product8='Y' then 1 else 0 end + case when Product9='Y' then 1 else 0 end + case when Product10='Y' then 1 else 0 end as InStockCountfrom Locationswhere State = 'PA') aorder by InStockCount DESC

order by

(case when product1='Y' then 1 else 0 end +

case when product2='Y' then 1 else 0 end +

case when product3='Y' then 1 else 0 end +

case when product4='Y' then 1 else 0 end +

case when product5='Y' then 1 else 0 end +

case when product6='Y' then 1 else 0 end +

case when product7='Y' then 1 else 0 end +

case when product8='Y' then 1 else 0 end +

case when product9='Y' then 1 else 0 end +

case when product10 = 'Y' then 1 else 0 end

)