【问题标题】:To select range of rows from SQL Server while joining two tables在连接两个表时从 SQL Server 中选择行范围
【发布时间】:2018-09-01 17:37:07
【问题描述】:

我想在连接两个表时从我的数据库中选择一系列记录。

我加入表格的查询是

SELECT c.customernumber, 
       c.customername, 
       c.duedate, 
       c.chequenumber, 
       c.amount, 
       c.status, 
       n.nextdate, 
       a.tel, 
       a.tel2, 
       a.mobile 
FROM   currentcustemerchequetable c 
       INNER JOIN newtdate n 
               ON c.customernumber = n.customerno 
       INNER JOIN customeraddresstable a 
               ON c.customernumber = a.code 

我需要从上述查询的结果中选择,比如说 10 到 25 之间的记录。

上面的查询返回一千条记录,所以我只需要从中选择记录

【问题讨论】:

  • 提供一些样本数据并期待结果。

标签: sql sql-server


【解决方案1】:

你可以使用OFFSET

例如在 10 行之后得到 20 行;

Select 
    c.CustomerNumber,
    c.CustomerName,
    c.DueDate,
    c.ChequeNumber,
    c.Amount,
    c.Status,
    n.NextDate,
    a.tel,
    a.tel2,
    a.mobile 
from 
    currentCustemerChequeTable c 
    inner join NewTDate n on c.CustomerNumber = n.CustomerNO 
    inner join CustomerAddressTable a on c.CustomerNumber = a.code
ORDER BY c.CustomerNumber 
  OFFSET 10 ROWS
  FETCH NEXT 20 ROWS ONLY

【讨论】:

    【解决方案2】:

    您也可以通过row_number()函数生成序列

    with cte as 
    (
         select *,
                 row_number() over (order by CustomerNumber)  Seq
         from <query>
    )
    
    select * from cte
    where seq >= 10 and seq <= 25
    

    但是,与offset 相比,这里的一个优势是您还可以明智地通过departmental 获取记录。因此,查询将是

    with cte as 
     (
         select *,
                     row_number() over (partition by <col> order by CustomerNumber)  Seq
         from <query>
    )
    
    select * from cte
    where seq >= 10 and seq <= 25
    

    【讨论】:

    • 兄弟,客户检查表中的 cte 是什么?我不关注
    猜你喜欢
    • 1970-01-01
    • 2020-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-20
    • 1970-01-01
    • 2018-09-13
    • 1970-01-01
    相关资源
    最近更新 更多