我使用SQL Server,我有这样的表:
<表类>
id
大小
统治
tbody><<tr>1 大 利雅得 1小 利雅得 2大 麦加 2中 麦加 2小 吉达 3 中的 达曼 表类>
假设您希望按此顺序优先考虑大、中、小,我们可以尝试如下使用ROW_NUMBER
:
WITH cte AS (
SELECT *, ROW_NUMBER() OVER (PARTITION BY id, reign
ORDER BY CASE size WHEN 'large' THEN 1
WHEN 'medium' THEN 2
WHEN 'small' THEN 3 END) rn
FROM yourTable
)
SELECT id, size, reign
FROM cte
WHERE rn = 1
ORDER BY id;
If您的数据总是以这种简单的形式(意味着只有这三种大小)和如果您总是希望首先选择large
(如果存在),否则首先选择medium
(如果存在),最后选择small
(如果存在),这可以使用MIN
和GROUP BY
(带有良好的ORDER BY
子句)来完成:
SELECT id, MIN(size) AS size, reign
FROM yourtable
GROUP BY id, reign
ORDER BY id, size;
这个查询将产生与你的问题完全相同的结果。
在这里验证:db<>fiddle
如果这个逻辑不足以满足你的要求,请编辑你的问题并更详细地解释你需要什么。