Microsoft SQL Server:创建销售额降序且ID为1-10的新表
没问题,在SQL Server里你可以用窗口函数ROW_NUMBER()轻松实现这个需求,下面给你两种常用的方案,根据你的实际情况选择就行:
方案一:直接创建新表(若新表尚未存在)
如果还没有目标新表,可以用SELECT INTO语句一次性完成表创建和数据插入:
SELECT ROW_NUMBER() OVER (ORDER BY sales DESC) AS id, sales INTO NewSalesTable -- 替换成你想要的新表名称 FROM YourOriginalTable; -- 替换成你的原始表名称
这里的ROW_NUMBER()函数会按照销售额sales降序的顺序,为每一行分配一个从1开始的连续编号,刚好作为新表的id列,完美匹配你要的1至10的顺序。
方案二:插入到已存在的新表中
如果已经提前创建了结构匹配的新表(比如新表字段为id INT和sales(对应你原表的销售额数据类型)),就用INSERT INTO语句插入数据:
INSERT INTO NewSalesTable (id, sales) SELECT ROW_NUMBER() OVER (ORDER BY sales DESC) AS id, sales FROM YourOriginalTable;
额外注意事项
- 如果原表的
sales列存在NULL值,ORDER BY sales DESC会把这些NULL值排在最后。如果你想把NULL值当作0或者其他值排序,可以改成ORDER BY ISNULL(sales, 0) DESC,根据你的业务需求调整即可。 - 只要原表正好有10条记录,生成的新表
id就会严格是1到10的顺序,完全符合你的要求。
内容的提问来源于stack exchange,提问作者garbage00




