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 .

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top