Comment savoir si toutes les cellules ont la même valeur dans une colonne

Comment savoir si toutes les cellules ont la même valeur dans une colonne (titre changé)

Je veux avoir une valeur scalaire un peu qui me dit si toutes les valeurs dans une colonne égalent quelque chose:

DECLARE @bit bit SELECT @bit = TRUEFORALL(Name IS NOT NULL) FROM Contact 

METTRE À JOUR

Je me suis alors rendu count que je n'ai pas vraiment besoin de TrueForAll, ce dont j'ai besoin est de m'assurer que toutes les valeurs d'une colonne sont égales, par exemple, je veux savoir si tous les Group.Items ont le même prix.

    Pour votre exigence mise à jour, quelque chose comme ça semble faire ce que vous voulez:

     DECLARE @IsSameGroup bit SELECT @IsSameGroup = CASE WHEN COUNT(*) > 1 THEN 0 ELSE 1 END FROM (SELECT Name FROM Contact GROUP BY Name) groups 

    Lorsque le nombre est supérieur à 1, vous avez deux noms différents (ou des prix en fonction de ce que vous regroupez)

    Pourquoi pas?

     select count( distinct price) from table 

    Si returnne 1, toutes les valeurs sont les mêmes … Ajouter

    where price is not null

    si besoin est

    Peut être ça?

     DECLARE @bit bit if exists(SELECT Name FROM Contact WHERE Name IS NULL) SET @bit = 0 ELSE SET @bit = 1 

    Cela résout votre première question:

     SELECT CASE WHEN EXISTS( SELECT 1 FROM Contact WHERE Name IS NULL ) THEN 0 ELSE 1 END 

    AJOUTÉE:

    Cela va résoudre votre deuxième:

     SELECT CASE WHEN EXISTS( SELECT TOP 1 1 FROM ( SELECT ItemGroupName, COUNT(Price) AS CNT FROM ItemGroup GROUP BY ItemGroupName HAVING COUNT(Price) > 1 ) t ) THEN 0 ELSE 1 END 

    En passant, lorsque vous utilisez la fonction exists, il est préférable de sélectionner 1 (une constante) afin que less de données soient renvoyées

    Pas très bon pour les NULL, mais 2008 peut faire:

     SELECT 1 WHERE 'Blue' = ALL ( SELECT Color FROM dbo.Hat ) 

    OU

     DECLARE @bit bit SET @bit = CASE ( SELECT 1 WHERE 'Blue' = ALL ( SELECT Color FROM dbo.Hat )) WHEN 1 THEN 1 ELSE 0 END 

    METTRE À JOUR

    Tous de la même couleur

     SET @bit = CASE( SELECT 1 WHERE (SELECT TOP(1) Color FROM dbo.Hat) = ALL ( SELECT Color FROM dbo.Hat ) ) WHEN 1 THEN 1 ELSE 0 END