Je vois que deux personnes ont répondu à votre question en utilisant des exemples agrégés. En effet, ils utilisent tous les deux GROUP BY et la clause HAVING. Vous n'avez pas nécessairement besoin d'utiliser un quelconque regroupement pour obtenir le résultat souhaité ici. Voici ci-dessous une solution alternative. C'est peut-être simplement une opinion, mais je préfère cette solution :
WITH demo_data (cname, col1, col2, col3) AS
( /* Utilisation de CTE pour produire une fausse table avec des données */
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
( /* Utilisation de decode pour convertir tous les 'Y' et 'N' en nombres */
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
)
/* Maintenant nous avons créé notre colonne SUM en utilisant les colonnes 1 à 3 */
SELECT cname, col1, col2, col3
/* Je n'avais pas besoin de créer la colonne sum_col mais je l'ai ajoutée à des fins visuelles */
, col1 + col2 + col3 AS sum_col
FROM transform_data
WHERE col1 + col2 + col3 > 1
;
Capture d'écran de la sortie pour chacune des tables produites par la clause WITH et la sortie désirée réelle.
![entrez la description de l'image ici]()