SQL Server 多表关联查询并分页

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] = 5 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] =5 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] =5 group by FlightId))t  where rowNumber between 0 and 10 order by t.Etd desc

2.临时表

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] =5 group by FlightId) order by t.FlightId desc  
select * from #a  where rowNumber between 0 and 10
select COUNT(*) as totalCount from #a
drop Table #a

3.分页存储过程

USE [CDM]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROC [dbo].[p_GetModifyTOBTFlight]
@PageIndex int,
@PageSize int,
@calsign nvarchar(50),
@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] =5 and Calsign like '%'+@calsign+'%' group by FlightId)  
     select * from #a  where rowNumber between @PageSize*((@PageIndex)-1) 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] =5 group by FlightId)if@pageIndex >1  begin 
    select * from #b  where rowNumber between (@PageSize*((@PageIndex)-1)+1) and @PageSize*@PageIndex 
  endelse  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(20),
@StartTime datetime,
@EndTime datetime,
@DepAddr nvarchar(25),
@ArrAddr nvarchar(25),
@TimeDiff int,
@Recount int output
AS
BEGIN
declare @sql nvarchar(1000)
declare @countSql nvarchar(1000)
declare @where nvarchar(1000) =' WHERE  1=1 '
declare @cols nvarchar(1000) =' 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(50) =' 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)-1))
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
 select * from (select  row_number() over(order by a.id desc) as row,A.Id, B.MaterialName,A.BatchCode,A.SaveTime,A.CompleteQuantity,A.IsQuality
 from ZJ_BatchInformation as a,ZJ_BatchNumMaterial as b where  A.BatchNumRuleCode=B.BatchNumRuleCode ) TT where tt.row between 1 and 20
select * from(

   select *, ROW_NUMBER() OVER(order by Id asc) row from

     (select p.*,s.Sheng,i.Shi,a.PinPai

from  [dbo].[ProductRecordInfo]

p left join [ShengInfo] s on p.ShengInfo = s.ShengId

left join [ShiInfo] i on p.ShiInfo = i.ShiId

left join[dbo].[PinPaiInfo] a on p.PinPaiInfo=a.Aid)t1)t2

where t2.Row between 1 and 3
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQL Server中,可以使用JOIN关键字来进行两个表的联立查询。例如,如果有两个表table1和table2,并且它们之间有一个关联字段field1,可以使用以下语句进行联立查询: SELECT * FROM table1 JOIN table2 ON table1.field1 = table2.field1; 这将返回两个表中关联字段匹配的所有行。如果某行在左表中没有匹配到右表中的行,则结果中对应行右表的部分将全部为空(NULL);如果某行在右表中没有匹配到左表中的行,则结果中对应行左表的部分将全部为空(NULL)。这种联立查询被称为完全外连接\[2\]。 在联立查询的结果中,可以选择需要的列进行显示。例如,如果想要显示row、a.id、b.ProjectName等列,可以在SELECT语句中指定这些列的名称\[3\]。 #### 引用[.reference_title] - *1* [sql怎么两个表关联查询](https://blog.csdn.net/weixin_42590539/article/details/129570171)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [SQL server多表联合查询](https://blog.csdn.net/zou15093087438/article/details/79226394)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [SQL server2008 多表联合查询,分页显示结果](https://blog.csdn.net/Annn_kk/article/details/70207830)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值