善用临时表---同时查询多张表的存储过程

本文介绍了一个存储过程的设计,该过程从三张不同的表中抽取数据并整合成一张表,同时实现了分页功能。此外,还计算了整合后的表中的记录总数。
一个存储过程的需求是这样的:
1、取出三张表里的符合条件的数据,合成一张表,并对这一张表分页;

2、计算合成的这张表总共多少条数据


存储过程语句如下:

Create PROCEDURE  GetAnnouncementList
    @pageSize int,
    @pageIndex int
AS
BEGIN

--不返回影响的行数,提高性能--
    SET NOCOUNT ON;


    declare @rowCount int


--将数据查询出来放入临时表#temptable中,语法:“ select  字段 into 临时表名 from ” --
select ROW_NUMBER()over (order by #temptable.CreatedOn desc)as tempNum, * into #temptable from
(select 'markNews' as mark, News.NewsID,News.NewsTitle,News.CreatedOn from dbo.News where CategoryID ='8b041bf4-24bf-4b35-85c7-f72717dc5752'
union all
select 'markActivity' as mark, Activities.ActivityID,Activities.Subject,Activities.CreatedOn from dbo.Activities where Activities.CheckStatus=1 and IsDeleted=0 and Activities.RealEndTime>(select GETDATE())
union all
select 'markTrain' as mark, Train.TrainID,Train.Subject,Train.CreatedOn from dbo.Train where CheckStatus=1 and Train.PlannedEndTime>(select GETDATE()))as #temptable

--计算临时表中的数据条数--
select @rowCount=COUNT(*) from #temptable

--对临时表中的数据分页读取--
select * from #temptable where #temptable.tempNum>(@pageIndex-1)*@pageSize and #temptable.tempNum<=(@pageIndex*@pageSize)

return @rowCount
END

### SQL Server 中使用存储过程进行多连接查询以生成统计报 在SQL Server环境中,为了实现复杂的数据分析需求,通常会创建存储过程来执行涉及多个格的联接操作并返回汇总统计数据。下面是一个具体的例子,展示如何编写一个多连接查询存储过程用于生成销售部门员工绩效报告。 #### 创建示例数据库结构 假设存在三个主要的关系型格:`Employees`, `SalesOrders`, 和 `Products`. 这些格分别记录了公司职员的信息、订单详情以及产品资料。 ```sql -- 建立 Employees 格 CREATE TABLE Employees ( EmployeeID INT PRIMARY KEY, FirstName NVARCHAR(50), LastName NVARCHAR(50), Department NVARCHAR(50) ); -- 建立 SalesOrders 格 CREATE TABLE SalesOrders ( OrderID INT PRIMARY KEY, ProductID INT, Quantity INT, SaleDate DATE, EmployeeID INT FOREIGN KEY REFERENCES Employees(EmployeeID) ); -- 建立 Products 格 CREATE TABLE Products ( ProductID INT PRIMARY KEY, Name NVARCHAR(100), UnitPrice DECIMAL(18, 2) ); ``` #### 编写存储过程 接下来定义一个名为 `usp_GenerateEmployeePerformanceReport` 的存储过程,该过程接受起始日期和结束日期作为参数,并计算每位销售人员在这段时间内的销售额总计。 ```sql CREATE PROCEDURE usp_GenerateEmployeePerformanceReport @StartDate DATE, @EndDate DATE AS BEGIN SET NOCOUNT ON; SELECT e.FirstName + ' ' + e.LastName AS FullName, d.Department, SUM(s.Quantity * p.UnitPrice) AS TotalSalesAmount FROM Employees e JOIN SalesOrders s ON e.EmployeeID = s.EmployeeID JOIN Products p ON s.ProductID = p.ProductID WHERE s.SaleDate BETWEEN @StartDate AND @EndDate GROUP BY e.FirstName, e.LastName, d.Department; END GO ``` 此段代码通过三张之间的内连接(inner join),即`Employees`,`SalesOrders`和`Products`,实现了基于时间范围筛选后的销售金额累加功能[^1]。 当调用上述存储过程时,可以传入特定的时间区间来获取相应期间内各销售代现情况: ```sql EXEC usp_GenerateEmployeePerformanceReport '2023-01-01', '2023-12-31'; ``` 这将返回一份包含姓名、所属部门及总销售收入的结果集,适用于制作月度或年度业绩评估报告。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值