2013-09-25 44 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