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

时间:2011-10-27 19:52:39

标签: tsql

我有这张桌子

col 1   col 2   col 3   ....    col N
-------------------------------------
1       A       B               fooa        
10      A       foo             cc
4       A       B               fooa

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

col 1   col 2   col 3   ....    col N
-------------------------------------
--      A       --              --

1 个答案:

答案 0 :(得分: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

您必须在列中允许NULL:

  • COUNT(*)统计他们
  • COUNT(col1)不计算

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

编辑:

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