2013-09-25 45 views
0

我想選擇類型'f'是通過類型'我'選擇相同的我(度量)如果類型'f'存在的行。SQL Server - 篩選特定的行

從:

╔════╦══════╦═══════╗ 
║ Me ║ VAL ║ TYPE ║ 
╠════╬══════╬═══════╣ 
║ 1 ║ 0 ║  f ║ 
║ 1 ║ 1 ║  i ║ 
║ 2 ║ 1 ║  i ║ 
║ 2 ║ 0 ║  f ║ 
║ 3 ║ 1 ║  i ║ 
║ 4 ║ 0 ║  i ║ 
║ 5 ║ 0 ║  i ║ 
╚════╩══════╩═══════╝ 

得到:

╔════╦══════╦═══════╗ 
║ Me ║ BIT ║ TYPE ║ 
╠════╬══════╬═══════╣ 
║ 1 ║ 0 ║  f ║ 
║ 2 ║ 1 ║  f ║ 
║ 3 ║ 1 ║  i ║ 
║ 4 ║ 0 ║  i ║ 
║ 5 ║ 0 ║  i ║ 
╚════╩══════╩═══════╝ 
+0

問題要求代碼必須表現出對問題的理解最小正在解決。包括嘗試解決方案,爲什麼他們沒有工作,以及預期的結果。 – Kermit

回答

6

下面的語句使用ROW_NUMBER()其是排名函數生成序列號。該編號爲每個Me生成並按Type排序。這使用CASE,假設表中有TYPE的其他值。

SELECT Me, Val, Type 
     FROM  
     (
      SELECT Me, Val, Type, 
        ROW_NUMBER() OVER (PARTITION BY Me 
             ORDER BY CASE WHEN Type = 'f' 
                THEN 0 ELSE 1 END) rn 
      FROM tableName 
     ) a 
WHERE a.rn = 1 
+1

是的,我更喜歡這個......它考慮到可能在'f'之前出現的值。 + 1 – RThomas