2011-10-27 40 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