Как знать, имеют ли все ячейки то же значение в некотором столбце

Как знать, имеют ли все ячейки то же значение в некотором столбце (измененный заголовок)

Я хочу иметь немного скалярную величину, которая говорит мне, если все значения в столбце равняются чему-то:

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

ОБНОВЛЕНИЕ

Я теперь понял, что мне на самом деле не нужен TrueForAll, в чем я действительно нуждаюсь, должен удостовериться, что все значения в столбце равны, например, я хочу знать ли вся Группа. Объекты имеют одну цену.

6
задан Shimmy 23 December 2009 в 02:13
поделиться

5 ответов

Для вашего обновленного требования что-то подобное будет выглядеть так, как вы хотите:

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

Когда счетчик больше 1, у вас два разных имени (или цены в зависимости от того, на что вы группируете)

.
6
ответ дан 8 December 2019 в 05:55
поделиться

Почему бы и нет?

select count( distinct price) from table

Если возвращается 1, то все значения одинаковы... Добавьте

, где цена не является нулевой

, если нужно

.
14
ответ дан 8 December 2019 в 05:55
поделиться

Не очень хорошо для NULL, но 2008 может сделать:

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

Или

DECLARE @bit bit

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

UPDATE

Все того же цвета

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 
1
ответ дан 8 December 2019 в 05:55
поделиться

Может быть, это?

DECLARE @bit bit
if exists(SELECT Name FROM Contact WHERE Name IS NULL) 
   SET @bit = 0
ELSE
  SET @bit = 1
1
ответ дан 8 December 2019 в 05:55
поделиться

Это решает ваш первый вопрос:

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

ADDED:

Это решит ваш второй:

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

Кстати, когда вы используете существующую функцию, лучше выбрать 1 (константу), чтобы меньше данных возвращалось

.
0
ответ дан 8 December 2019 в 05:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: