0

如果存在“f”类型,我正在尝试为相同的 Me(公制)选择 TYPE“f”而不是“i”类型的行。

例子

从:

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

1 回答 1

6

下面的语句使用ROW_NUMBER()which 是一个生成序列号的排名函数。为每个生成数字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
于 2013-09-25T14:32:59.783 回答