zoukankan      html  css  js  c++  java
  • 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,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] =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,以 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(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 
      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(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
  • 相关阅读:
    Tomcat、Jetty、Undertow、Netty 等容器的区别
    Spring boot整合Swagger2接口文档使用
    为项目配置了Bean,结果Spring Boot并没有扫描到
    yum安装软件所在目录的查询
    LINUX云服务器 安装 nginx
    Cause: org.jetbrains.plugins.gradle.tooling.util.ModuleComponentIdentifierIm Lorg/gradle/api/artifacts/ModuleIdentifier;
    redis数据结构
    linux安装redis
    eclipse项目目录展示结构设置
    tomcat 搭建以及发布配置
  • 原文地址:https://www.cnblogs.com/lcidy/p/10196080.html
Copyright © 2011-2022 走看看