如果类型'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 ║
╚════╩══════╩═══════╝
答案 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