SQL Server - 筛选特定的行

时间:2013-09-25 14:29:17

标签: sql sql-server

如果类型'f'存在,我试图选择TYPE'i'选择TYPE'i'的行为同一Me(公制)。

实施例

从:

╔════╦══════╦═══════╗
║ 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 ║
╚════╩══════╩═══════╝

1 个答案:

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