SQL PARTITION BY 语句把一张表分组后的最大值或最小值插入另一张表里

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
复制代码

 

posted @   katesharing  阅读(126)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示