sql - 按组条件选择寄存器

标签 sql sql-server

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

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

enter image description here

最佳答案

这可能是一种方法。

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;

关于sql - 按组条件选择寄存器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54595886/

相关文章:

c# - 异步 ADO.NET

sql - 是否有为 SQL Server 生成完整数据库 DDL 的工具? Postgres 和 MySQL 呢?

SQL Server 2008查询编辑器改变查询逻辑

SQL Always 加密 CMK 证书存储最佳实践

sql - SQL 中长时间运行更新期间的并发性

sql - Google Big Query SQL - 获取最新的列值

sql-server - 如何让一个事务覆盖多个存储过程?

mysql - 选择带有尾部斜杠的近重复项

SQL - 在一个脚本中创建数据库和表

sql-server - 如果月份从 12 个月增加,则计算持续时间(以年为单位)