首页 > 解决方案 > 按组上的条件选择寄存器

问题描述

假设我有一个包含两列的表,两列TYPE & COLOR都可以有重复值,但是我需要为 TYPE 列中的每个值获取一个寄存器,并在 COLOR 列中根据层次结构 1-blue,2-green 获取值,3-黑色,4-红色和最后 5-白色。为了更好地解释我自己,我有图 1 中的表格,而我想要的结果在图 2 中。

我可以使用获取 TYPE 值MIN()GROUP BY但是如何根据层次结构获取颜色值?

在此处输入图像描述

标签: sqlsql-server

解决方案


这可能是一种方法。

WITH CTE AS(
    SELECT *, ROW_NUMBER() OVER(PARTITION BY type ORDER BY CASE color WHEN 'blue'  THEN 1
                                                                    WHEN 'green' THEN 2
                                                                    WHEN 'black' THEN 3
                                                                    WHEN 'red'   THEN 4
                                                                    WHEN 'white' THEN 5 END) rn
    FROM SomeTable
)
SELECT type, color
FROM CTE
WHERE rn = 1;

推荐阅读