SQL PARTITION BY 语句把一张表分组后的最大值或最小值插入另一张表里
1.例子见前一章,目的是有分组的,只显示OrderAmount最高的(即每组只显示一列)
2.再建一个表来存储
CREATE TABLE [dbo].[MaxOrders]( [orderid] [int] NULL, [Orderdate] [date] NULL, [CustomerName] [varchar](100) NULL, [Customercity] [varchar](100) NULL, [MaxOrderamount] [money] NULL ) ON [PRIMARY] GO
3.往新表插入数据的写法如下:
insert into [dbo].[MaxOrders] (Orderdate,CustomerName,Customercity,MaxOrderamount) select t.Orderdate,t.CustomerName,t.Customercity,t.Orderamount from ( select ROW_NUMBER() over (partition by Customercity order by Orderamount desc)as row_num, * from Orders ) as t where row_num=1
4.把上面合起来写法如下(就是对已有数据进行初始化处理,一开始表要插入这些数据):
IF NOT EXISTS(SELECT 1 FROM sys.tables where name='MaxOrders2') BEGIN CREATE TABLE [dbo].[MaxOrders2]( [orderid] [int] NULL, [Orderdate] [date] NULL, [CustomerName] [varchar](100) NULL, [Customercity] [varchar](100) NULL, [MaxOrderamount] [money] NULL ) ON [PRIMARY] DECLARE @sql2 nvarchar(2048)=' insert into [dbo].[MaxOrders2] (orderid,Orderdate,CustomerName,Customercity,MaxOrderamount) select t.orderid, t.Orderdate,t.CustomerName,t.Customercity,t.Orderamount from ( select ROW_NUMBER() over (partition by Customercity order by Orderamount desc)as row_num, * from Orders ) as t where row_num=1 '; EXEC sys.sp_executesql @query=@sql2; END
本文来自博客园,转载请注明原文链接:https://www.cnblogs.com/keeplearningandsharing/p/18001330
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构