I see that two individuals answered your question using aggregate examples. As in they are both using GROUP BY and the HAVING Clause. You don't necessarily need to use any sort of Grouping to get your desired output here. See below an alternate solution. It may be simply an opinion however I prefer this solution:
WITH demo_data (cname, col1, col2, col3) AS
( /* Using CTE to produce fake table with data */
SELECT 'cust1', 'Y', 'Y', 'N' FROM dual UNION ALL
SELECT 'cust2', 'N', 'N', 'Y' FROM dual UNION ALL
SELECT 'cust3', 'Y', 'N', 'Y' FROM dual UNION ALL
SELECT 'cust4', 'Y', 'Y', 'Y' FROM dual UNION ALL
SELECT 'cust5', 'Y', 'Y', 'N' FROM dual UNION ALL
SELECT 'cust6', 'Y', 'N', 'N' FROM dual
)
, transform_data AS
( /* Using decode to convert all 'Y' and 'N' to numbers */
SELECT cname
, decode(col1, 'Y', 1, 0) AS col1
, decode(col2, 'Y', 1, 0) AS col2
, decode(col3, 'Y', 1, 0) AS col3
FROM demo_data
)
/* Now we created our SUM column using the columns 1 thru 3 */
SELECT cname, col1, col2, col3
/* I didn't need to create the sum_col however I added it for visual purposes */
, col1 + col2 + col3 AS sum_col
FROM transform_data
WHERE col1 + col2 + col3 > 1
;
Screenshot of the output for each of the tables produced by the WITH Clause and actual desired Output.
GROUP BYwhich suggests aggregation over several rows. So again: Is there only one row per customer in the table?