Come sapere se tutte le cellule hanno lo stesso valore in qualche colonna
-
21-09-2019 - |
Domanda
Come sapere se tutte le cellule hanno lo stesso valore in qualche colonna (titolo cambiato)
Voglio avere un valore di bit scalare che mi dice che se tutti i valori di una colonna uguale qualcosa:
DECLARE @bit bit
SELECT @bit = TRUEFORALL(Name IS NOT NULL) FROM Contact
Aggiorna
Ora mi sono reso conto che in realtà non è necessario il TrueForAll, quello che ho bisogno è quello di assicurarsi che tutti i valori di una colonna sono uguali, per esempio, io voglio sapere se tutti i Group.Items hanno lo stesso prezzo .
Soluzione
Per il vostro requisito qualcosa di aggiornato come questo sembrerebbe di fare ciò che si vuole:
DECLARE @IsSameGroup bit
SELECT @IsSameGroup = CASE WHEN COUNT(*) > 1 THEN 0 ELSE 1 END
FROM (SELECT Name FROM Contact GROUP BY Name) groups
Quando il conteggio è maggiore del 1 si hanno due nomi diversi (o dei prezzi a seconda di quello che il gruppo)
Altri suggerimenti
Perché no?
select count( distinct price) from table
Se restituisce 1, tutti i valori sono gli stessi ... Aggiungi
where price is not null
se necessario
Non molto buono per i NULL, ma il 2008 può fare:
SELECT 1 WHERE 'Blue' = ALL ( SELECT Color FROM dbo.Hat )
o
DECLARE @bit bit
SET @bit =
CASE ( SELECT 1 WHERE 'Blue' = ALL ( SELECT Color FROM dbo.Hat ))
WHEN 1 THEN 1 ELSE 0 END
Aggiorna
Tutti stesso colore
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
Forse questo?
DECLARE @bit bit
if exists(SELECT Name FROM Contact WHERE Name IS NULL)
SET @bit = 0
ELSE
SET @bit = 1
Questo risolve la vostra prima domanda:
SELECT
CASE
WHEN EXISTS(
SELECT 1
FROM Contact
WHERE Name IS NULL
) THEN 0
ELSE 1
END
AGGIUNTO:
Questo risolverà il vostro secondo:
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
A proposito, quando si utilizza la funzione, la sua migliore selezionare ci sono 1 (una costante) quindi meno dati vengono restituiti