sql - 按组上的条件选择寄存器
问题描述
假设我有一个包含两列的表,两列TYPE & COLOR
都可以有重复值,但是我需要为 TYPE 列中的每个值获取一个寄存器,并在 COLOR 列中根据层次结构 1-blue,2-green 获取值,3-黑色,4-红色和最后 5-白色。为了更好地解释我自己,我有图 1 中的表格,而我想要的结果在图 2 中。
我可以使用获取 TYPE 值MIN()
,GROUP BY
但是如何根据层次结构获取颜色值?
解决方案
这可能是一种方法。
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;
推荐阅读
- database - 如何将多个“输入字段”添加为对象或数组
- sql-server - 尝试使用 导入值时数据转换失败。精确
- video - 使用 GStreamer 将 M3U8 播放列表转换为 MP4
- r - 无法在 Bioconductor 3.12 (R 4.0.1) 中安装 Systemfonts 包
- mysql - MariaDB / Wordpress 高 CPU 建议
- swift - 如何在 SwiftUI 中使用 UserData 可观察对象?
- ios - iPhone 11 Pro Max 上带有故障内容的 UIScrollView
- parameters - react.js 将多个参数传递给箭头函数
- c++ - 在 OpenGL 中使用 C++ 纹理化 3d 多边形
- javascript - 有没有办法在 Chrome 开发者工具中显示所有定义的类名?