SQL-Server多表关联查询并分页
一、多表关联查询
1,left join
RelaTimeLog表 和 ValidFlight表关联查询
select t.FlightId,t.Calsign,t.DepAddrName,t.ArrAddrName,t.Etd FROM [CDM].[dbo].[ValidFlight] t left join [CDM].[dbo].[RelaTimeLog] f on t.FlightId = f.FlightId where f.[Type] = order by t.FlightId desc
2,与group by连用
select t.FlightId,t.Calsign,t.DepAddrName,t.ArrAddrName,t.Etd FROM [CDM].[dbo].[ValidFlight] t where FlightId in (select FlightId from [CDM].[dbo].[RelaTimeLog] where [Type] = group by FlightId) order by t.FlightId desc
二、分页
1,查询0到10条
select t.FlightId,t.Calsign,t.DepAddrName,t.ArrAddrName,t.Etd from (select *,ROW_NUMBER() over (order by FlightId Desc) as rowNumber FROM [CDM].[dbo].[ValidFlight]
where FlightId in (select FlightId from [CDM].[dbo].[RelaTimeLog] where [Type] = group by FlightId))t where rowNumber between and order by t.Etd desc
2,BETWEEN * AND * , Row_Number() OVER(ORDER BY *) AS rowNum
select t.FlightId,t.Calsign,t.DepAddrName,t.ArrAddrName,t.Etd,ROW_NUMBER() over (order by FlightId Desc) as rowNumber into #a FROM [CDM].[dbo].[ValidFlight] t
where FlightId in (select FlightId from [CDM].[dbo].[RelaTimeLog] where [Type] = group by FlightId) order by t.FlightId desc
select * from #a where rowNumber between and
select COUNT(*) as totalCount from #a
drop Table #a
3,以 BETWEEN * AND * , Row_Number() OVER(ORDER BY *) AS rowNum为例的分页存储过程
USE [CDM]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROC [dbo].[p_GetModifyTOBTFlight]
@PageIndex int,
@PageSize int,
@calsign nvarchar(),
@Recount int output
AS
BEGIN if @calsign<>''
BEGIN
select CONVERT(int,t.FlightId) as FlightId,t.Calsign,t.DepAddrName,t.ArrAddrName,t.Etd, ROW_NUMBER() over (order by Etd Desc) as rowNumber into #a FROM [CDM].[dbo].[ValidFlight] t
where FlightId in (select FlightId from [CDM].[dbo].[RelaTimeLog] where [Type] = and Calsign like '%'+@calsign+'%' group by FlightId)
select * from #a where rowNumber between @PageSize*((@PageIndex)-) and @PageSize*@PageIndex
set @Recount = (select COUNT(*) from #a)
drop Table #a
END
else
BEGINselect CONVERT(int,t.FlightId) as FlightId,t.Calsign,t.DepAddrName,t.ArrAddrName,t.Etd,t.Atd,t.Ata, t.Eta,ROW_NUMBER() over (order by etd Desc) as rowNumber into #b FROM [CDM].[dbo].[ValidFlight] t
where FlightId in (select FlightId from [CDM].[dbo].[RelaTimeLog] where [Type] = group by FlightId)
if@pageIndex >1
begin
select * from #b where rowNumber between (@PageSize*((@PageIndex)-1)+1) and @PageSize*@PageIndex
end
else
begin
select * from #b where rowNumber between @PageSize*((@PageIndex)-1) and @PageSize*@PageIndex
end set @Recount = (select COUNT(*) from #b)
print @Recount
drop Table #b
END
END
4,拼接SQL语句
USE [CDM]
GO
/****** Object: StoredProcedure [dbo].[p_GetHistoryFlight] Script Date: 2018/12/29 14:32:42 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROC [dbo].[p_GetHistoryFlight]
@PageIndex int,
@PageSize int,
@GsName nvarchar(),
@StartTime datetime,
@EndTime datetime,
@DepAddr nvarchar(),
@ArrAddr nvarchar(),
@TimeDiff int,
@Recount int output
AS
BEGIN
declare @sql nvarchar()
declare @countSql nvarchar()
declare @where nvarchar() =' WHERE 1=1 '
declare @cols nvarchar() =' Id,CONVERT(INT,FlightId) AS FlightId,Calsign,FlyTypeName,GsName,AcfTypeName,Stand,Etd,CTOT,Atd,Eta,Ata,TOBT,ApplicateTime,DepAddrName,ArrAddrName,1 AS TimeDiff ' declare @sort nvarchar() =' ORDER BY Etd desc'
if @StartTime IS NOT NULL
BEGIN
set @where=@where+' AND Etd>='''+CONVERT(nvarchar,@StartTime)+''''
END
if @EndTime IS NOT NULL
BEGIN
set @where=@where+' AND Etd<='''+CONVERT(nvarchar,@EndTime)+''''
END
if @DepAddr<>''
BEGIN
SET @where=@where + ' AND DepAddrName LIKE ''%'+@DepAddr+'%'''
END
if @DepAddr<>''
BEGIN
SET @where=@where + ' AND ArrAddrName LIKE ''%'+@ArrAddr+'%'''
END
print(@where)
if @GsName<>''
BEGIN
set @where=@where+' AND GsName LIKE ''%'+@GsName+'%'''
END
set @sql=N'SELECT TOP '+STR(@PageSize) +' * FROM ( SELECT ROW_NUMBER() OVER(ORDER BY Id desc) as rowid, ' + @cols +' FROM [CDM].[dbo].[ValidFlightHistory] ' +@where +') AS A WHERE rowid>'+STR(@PageSize*((@PageIndex)-))
print @sql
exec(@sql) set @countSql=N'SELECT @total=count(*) FROM [CDM].[dbo].[ValidFlightHistory] '+@where
print @countSql exec sp_executesql @countSql,N'@total int out',@total=@Recount out
END
SQL-Server多表关联查询并分页的更多相关文章
- SQL Server 锁表、查询被锁表、解锁相关语句
SQL Server 锁表.查询被锁表.解锁相关语句,供参考. --锁表(其它事务不能读.更新.删除) BEGIN TRAN SELECT * FROM <表名> WITH(TABLOCK ...
- sql server多表关联update
一般都是写的单表update语句,很少写多表关联的update,但是事实上,在SQL Server中,update的多表连接更新和select的多表连接查询在使用的方法上其实并没有多大区别. 直接上一 ...
- SQL Server多表同时查询
今天在练sql server发现多条语句同时使用可以多表同时查询,具体操作如下: 代码示例: USE teachingGOSELECT *FROM dbo.teach_classORDER BY cl ...
- sql server锁表、查询被锁表、解锁被锁表的相关语句
MSSQL(SQL Server)在我的印象中很容易锁表,大致原因就是你在一个窗口中执行的DML语句没有提交,然后又打开了一个窗口对相同的表进行CRUD操作,这样就会导致锁表.锁表是一种保持数据一致性 ...
- SQL server多表联合查询
参考网址: https://blog.csdn.net/zou15093087438/article/details/79226394 1. 外连接可分为:左连接.右连接.完全外连接. a. 左连接 ...
- sql server 多表关联更新 update
update a set a.KSMC = b.name from JC_KSXXB a inner join chisdb_ymyy..zd_unit_code b on a.KSDM = b.co ...
- sql语句 两表关联查询计算数量
select sum(a1.`num`) from `order_orderlistrow` as a1 INNER JOIN `order_orderlist` as a2 on a1.`ord ...
- 【SQL】在SQL Server中多表关联查询问题
好久没有写SQL语句的多表连接查询,总在用框架进行持久化操作.今天写了一个多表关联查询,想根据两个字段唯一确定一条数据 失败的案例如下: SELECT cyb.id,ad.name FROM [Gen ...
- RDIFramework.NET 中多表关联查询分页实例
RDIFramework.NET 中多表关联查询分页实例 RDIFramework.NET,基于.NET的快速信息化系统开发.整合框架,给用户和开发者最佳的.Net框架部署方案.该框架以SOA范式作为 ...
随机推荐
- 关于tableview下拉刷新崩溃的问题
逻辑应该是这样的:1. 下拉2. 达到下拉临界值以后再请求网络数据3. 待数据加载到本地以后才更新 data source4. reload tableview 如果先清空再下拉,后果就是往下拉的距离 ...
- C# 读取资源文件.resx 中的xml资源
主要是以字符串的形式来读取xml,然后通过遍历读取节点,通过节点属性名称获取属性值 /// <summary> /// 初始化OPC参数配置 /// </summary> // ...
- 2019年微服务实践第一课,网易&谐云&蘑菇街&奥思技术大咖深度分享
微服务的概念最早由Martin Fowler与James Lewis于2014年共同提出,核心思想是围绕业务能力组织服务,各个微服务可被独立部署,服务间是松耦合的关系,以及数据和治理的去中心化管理.微 ...
- Android------------------的快捷键的使用
https://www.cnblogs.com/shidian/p/6937630.html
- 日期时间类:Date,Calendar,计算类:Math
日期时间类 计算机如何表示时间? 时间戳(timestamp):距离特定时间的时间间隔. 计算机时间戳是指距离历元(1970-01-01 00:00:00:000)的时间间隔(ms). 计算机中时间2 ...
- [宁波集训]0827Day1
1.\(CF771D\ Bear\ and\ Company\)(原题,比赛时改为多组数据) 一道毒瘤\(dp\)题,\(dp[i][j][k][0/1]\)表示有\(i\)个\(V\),有\(j\) ...
- cad.net之ACAD移植到GCAD的自动加载问题
将acad.pgp,lsp,fas,vlx,名称增加一份gcad.pgp,lsp,fas,vlx.涉及系统加载用. Lisp的拖拉加载在gcad无法通过lastprompt获取命令历史栏最后一行(含路 ...
- win7 docker 挂载共享目录
在 win7 下用 docker 不像 win10 那样方便,安装包都不一样. 在 win7 下共享一个目录的方法如下: 1. 先设置 win7 到 VirtualBox 中 docker 用的那个虚 ...
- mybatis-spring集成:配置多数据库源中遇到的问题
转自:http://www.cfanz.cn/index.php?c=article&a=read&id=71583 mybatis配置多数据源本身很简单,和基本配置差别不大 但是如果 ...
- JavaScript 那些不经意间发生的数据类型自动转换
JavaScript可以自由的进行数据类型转换,也提供了多种显式转换的方式.但是更多的情况下,是由JavaScript自动转换的,当然这些转换遵循着一定的规则,了解数据类型自由转换的规则是非常必要的. ...