Sql 如何知道某列中所有单元格的值是否相同

Sql 如何知道某列中所有单元格的值是否相同,sql,sql-server,tsql,conditional-statements,equivalent,Sql,Sql Server,Tsql,Conditional Statements,Equivalent,如何知道某些列中的所有单元格是否具有相同的值(标题已更改) 我想要一个位标量值,它告诉我一列中的所有值是否等于: DECLARE @bit bit SELECT @bit = TRUEFORALL(Name IS NOT NULL) FROM Contact 更新 我现在意识到我实际上不需要TrueForAll,我需要的是确保一列中的所有值都相等,例如,我想知道是否所有Group.Items都有相同的价格。可能是这样吗 DECLARE @bit bit if exists(SELECT Nam

如何知道某些列中的所有单元格是否具有相同的值(标题已更改)

我想要一个位标量值,它告诉我一列中的所有值是否等于:

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

我现在意识到我实际上不需要TrueForAll,我需要的是确保一列中的所有值都相等,例如,我想知道是否所有Group.Items都有相同的价格。

可能是这样吗

DECLARE @bit bit
if exists(SELECT Name FROM Contact WHERE Name IS NULL) 
   SET @bit = 0
ELSE
  SET @bit = 1

这解决了您的第一个问题:

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

这将解决您的第二个问题:

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

顺便说一句,当您使用exists函数时,最好选择1(一个常量),以便为您的更新需求返回较少的数据。类似这样的操作似乎可以满足您的需要:

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

当计数大于1时,您有两个不同的名称(或价格,取决于您的分组)

对于空值不是很好,但2008可以做到:

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

更新

一色

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 
为什么不呢

select count( distinct price) from table
如果返回1,则所有值都相同。。。加

其中价格不为空


如果需要

当然,这与OP问题中表达的逻辑相反。它应该是
,其中Name为NULL
,并将
位设置为0,否则将其设置为1。如果1+记录满足逻辑,则Exists将返回true。我在问题中犯了一个错误,请检查它。谢谢和抱歉。@Blorgbeard子选项给出了组数的计数。如果不这样做,您只会得到多条记录(每组一条)。马匹为球场真的。投票支持计数(distinct x),这似乎是我这里最明显的解决方案(当然是我想到的第一个),也是有效的ANSI SQL 92,以及您将得到的交叉播放形式。最后,非黑客使用
选择distinct
select count( distinct price) from table