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