簡體   English   中英

如何知道所有單元格在某些列中是否具有相同的值

[英]How to know if all the cells have the same value in some column

如何知道所有單元格是否在某些列中具有相同的值(標題已更改)

我想有一個標量值,告訴我列中的所有值是否相等:

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

UPDATE

我現在意識到我實際上不需要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時,您有兩個不同的名稱(或價格取決於您分組的內容)

也許這個?

DECLARE @bit bit
if exists(SELECT Name FROM Contact WHERE Name IS NULL) 
   SET @bit = 0
ELSE
  SET @bit = 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 

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 

這解決了你的第一個問題:

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函數時,它最好是SELECT 1(常量),因此返回的數據更少

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM