Comment écrire une requête pour déterminer simplement que les valeurs d'une colonne sont uniques?
Essaye ça:
SELECT CASE WHEN count(distinct col1)= count(col1)
THEN 'column values are unique' ELSE 'column values are NOT unique' END
FROM tbl_name;
Remarque: cela ne fonctionne que si 'col1' n'a pas le type de données 'ntext' ou 'text'. Si vous possédez l'un de ces types de données, utilisez "CAST distinct (col1 AS nvarchar (4000))" (ou similaire) au lieu de "distinct col1".
select count(distinct column_name), count(column_name)
from table_name;
Si le nombre de valeurs uniques est égal au nombre total de valeurs, toutes les valeurs sont uniques.
IF NOT EXISTS (
SELECT
column_name
FROM
your_table
GROUP BY
column_name
HAVING
COUNT(*)>1
)
PRINT 'All are unique'
ELSE
PRINT 'Some are not unique'
Si vous souhaitez répertorier ceux qui ne sont pas uniques, prenez simplement la requête interne et exécutez-la. HTH.
Avec cette requête suivante, vous avez non seulement l'avantage de voir si vos colonnes sont uniques, mais également celle qui est la plus non-unique. De plus, comme vous voyez toujours la fréquence 1 car votre clé est unique, vous savez que vos résultats sont bons et ne manquent pas par exemple; quelque chose est moins clair lorsque vous utilisez une clause HAVING.
SELECT Col1, Col2, COUNT(*) AS Freq
FROM Table
GROUP BY Col1, Col2
ORDER BY Freq DESC
Si vous voulez vérifier si toutes les valeurs sont uniques et vous vous souciez des valeurs NULL
, procédez comme suit:
select (case when count(distinct column_name) = count(column_name) and
(count(column_name) = count(*) or count(column_name) = count(*) - 1)
then 'All Unique'
else 'Duplicates'
end)
from table t;
Essayez-vous de ne renvoyer que les valeurs distinctes d'une colonne? Si tel est le cas, vous pouvez utiliser le mot clé DISTINCT. La syntaxe est la suivante:
SELECT DISTINCT column_name,column_name
FROM table_name;