2011-10-27 39 views
3

列等于行值我有这个表TSQL查询发现沿

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

,可以用T-SQL查询,以便用值仅其中的值都是一样的只返回一行?

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

回答

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 

你必须允许在列空值:

  • COUNT(*)计算他们
  • COUNT(COL1)不会指望他们

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

编辑:

  • 除去DISTINCT获得计数NULL检查同一
  • 添加MIN/MAX检查(根据马克·拜尔斯删除答案)检查独特
+0

+1这是一个好主意 –

+0

请阅读编辑。 –

+0

@MicheleVirgilio:固定... – gbn