如何知道某列中的所有单元格是否具有相同的值(标题已更改)
我想要一个标量值来告诉我列中的所有值是否都相等:
DECLARE @bit bit
SELECT @bit = TRUEFORALL(Name IS NOT NULL) FROM Contact
更新
我现在意识到我实际上不需要 TrueForAll,我需要的是确保列中的所有值都相等,例如,我想知道所有 Group.Items 是否具有相同的价格。
如何知道某列中的所有单元格是否具有相同的值(标题已更改)
我想要一个标量值来告诉我列中的所有值是否都相等:
DECLARE @bit bit
SELECT @bit = TRUEFORALL(Name IS NOT NULL) FROM Contact
更新
我现在意识到我实际上不需要 TrueForAll,我需要的是确保列中的所有值都相等,例如,我想知道所有 Group.Items 是否具有相同的价格。
为什么不?
select count( distinct price) from table
如果返回 1,则所有值都相同... 添加
where price is not null
如果需要的话
对于您更新的要求,这样的事情似乎可以满足您的要求:
DECLARE @IsSameGroup bit
SELECT @IsSameGroup = CASE WHEN COUNT(*) > 1 THEN 0 ELSE 1 END
FROM (SELECT Name FROM Contact GROUP BY Name) groups
当计数大于 1 时,您有两个不同的名称(或价格取决于您的分组)
对 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
更新
都是一样的颜色
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
也许这个?
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(常量),这样返回的数据更少