如何获取列中的单个值取决于两列



我使用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(如果存在),这可以使用MINGROUP BY(带有良好的ORDER BY子句)来完成:

SELECT id, MIN(size) AS size, reign
FROM yourtable
GROUP BY id, reign
ORDER BY id, size;

这个查询将产生与你的问题完全相同的结果。

在这里验证:db<>fiddle

如果这个逻辑不足以满足你的要求,请编辑你的问题并更详细地解释你需要什么。

相关内容

  • 没有找到相关文章