建一个新表名为个消费最高记录表,主键为学号,字段分别为学号,姓名,专业,学院,消费金额,消费来源 查询出各个消费来源中消费最高那一条记录以及对应的学生信息,将查询结果插入消费最高记录表 以上实现用存储过程实现
时间: 2023-09-28 16:13:37 浏览: 62
以下是建立存储过程的示例代码:
```
CREATE PROCEDURE insert_max_consumption_record
AS
BEGIN
--创建个消费最高记录表
IF NOT EXISTS(SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[max_consumption_record]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[max_consumption_record](
[stu_id] [varchar](20) NOT NULL PRIMARY KEY,
[stu_name] [nvarchar](50) NOT NULL,
[major] [nvarchar](50) NOT NULL,
[college] [nvarchar](50) NOT NULL,
[consumption_amount] [decimal](18, 2) NOT NULL,
[consumption_source] [nvarchar](50) NOT NULL
)
END
--查询各个消费来源中消费最高的记录,并插入到个消费最高记录表中
INSERT INTO [dbo].[max_consumption_record]
SELECT t1.[stu_id], t1.[stu_name], t1.[major], t1.[college], t1.[consumption_amount], t1.[consumption_source]
FROM (
SELECT [stu_id], [stu_name], [major], [college], [consumption_amount], [consumption_source],
ROW_NUMBER() OVER(PARTITION BY [consumption_source] ORDER BY [consumption_amount] DESC) AS rank
FROM [dbo].[consumption_record]
) AS t1
WHERE t1.rank = 1
END
```
上述代码中,我们首先判断是否已经存在个消费最高记录表,如果不存在则创建。然后,我们查询各个消费来源中消费最高的记录,并插入到个消费最高记录表中。
需要注意的是,上述代码中的查询语句使用了窗口函数 ROW_NUMBER(),用于按消费来源分组,并根据消费金额降序排列,然后取每个组中排名为 1 的记录,即该消费来源中消费最高的那一条记录。
最后,我们可以直接执行该存储过程即可完成对个消费最高记录表的插入操作。
```
EXEC insert_max_consumption_record
```
阅读全文