如果只存在一个不同的值,请选择不同的值?

l33*_*33t 2 sql sql-server

SQL Server 2012.我想从一个表中选择一个不同的值,T如果只有一个独特的价值存在.下面我有一个简单的例子,说明我正在尝试做什么.

此数据将导致1个返回值:'bbb'

ID    Data
----------
1    'bbb'
Run Code Online (Sandbox Code Playgroud)

这些数据也是如此:

ID    Data
----------
1    'bbb'
2    'bbb'
3    'bbb'
Run Code Online (Sandbox Code Playgroud)

但是这个数据会导致0个返回的行:

ID    Data
----------
1    'aaa'
2    'bbb'
3    'bbb'
Run Code Online (Sandbox Code Playgroud)

理想情况下,有一种方法可以计算WHERE子句中的行数(不分组数据).另外,请记住我的原始查询非常复杂.对于这个简化版本,我尝试过这样的东西,但它不起作用:

SELECT [Data] FROM
    (SELECT [Data], COUNT(*) OVER() AS [DinstinctValueCount] FROM
        (SELECT DISTINCT [Data] FROM [T]) [A]) [B] WHERE [DistinctValueCount] = 1
Run Code Online (Sandbox Code Playgroud)

列名称'DistinctValueCount'无效.

UPDATE

我找到了解决方案.还有更好的吗?

SELECT CASE WHEN COUNT(*) = 1 THEN MIN([Data]) ELSE NULL END AS [Data] FROM
    (SELECT DISTINCT [Data] FROM [T]) [A]
Run Code Online (Sandbox Code Playgroud)

任何聚合函数都可以.

fth*_*lla 6

SELECT MIN(ID), [Data]
FROM [tablename]
GROUP BY [Data]
HAVING
  1=(SELECT COUNT(DISTINCT [Data]) FROM [tablename])
Run Code Online (Sandbox Code Playgroud)

或者如果你不想重复[tablename],你可以使用这样的东西:

SELECT MIN(ID), MIN([Data])
FROM [tablename]
HAVING MIN([Data])=MAX([Data])
Run Code Online (Sandbox Code Playgroud)

请看这里的小提琴.