Tsql查询沿列查找相等的行值

ʞᴉɯ*_*ʞᴉɯ 3 t-sql

我有这张桌子

col 1   col 2   col 3   ....    col N
-------------------------------------
1       A       B               fooa        
10      A       foo             cc
4       A       B               fooa
Run Code Online (Sandbox Code Playgroud)

可以使用tsql查询只返回一行值,只有值是全部相同的值?

col 1   col 2   col 3   ....    col N
-------------------------------------
--      A       --              --
Run Code Online (Sandbox Code Playgroud)

gbn*_*gbn 5

SELECT
     CASE WHEN COUNT(col1) = COUNT(*) AND MIN(col1) = MAX(col1) THEN MIN(col1) END AS col1,
     CASE WHEN COUNT(col2) = COUNT(*) AND MIN(col2) = MAX(col2) THEN MIN(col2) END AS col2,
     ...
FROM yourtable
Run Code Online (Sandbox Code Playgroud)

您必须在列中允许NULL:

  • COUNT(*)计算它们
  • COUNT(col1)不计算它们

也就是说,混合了As和NULL的列不是一个值.MIN和MAX都会给出A,因为它们忽略了NULL.

编辑:

  • 删除DISTINCT以获得NULL检查的计数相同
  • 添加了MIN/MAX检查(根据Mark Byers删除的答案)来检查唯一性