当前位置: 首页 > 面试题库 >

如何重用通用表表达式

湛联
2023-03-14
问题内容

我正在使用通用表表达式进行分页:

with query as (
  Select Row_Number() over (Order By OrderNum ASC) as TableRowNum,
         FirstName,
         LastName
  From   Users
)
Select * from query where TableRowNum between 1 and 25 Order By TableRowNum ASC

进行此查询后,我立即进行几乎相同的查询以检索项目总数:

with query as (
  Select Row_Number() over (Order By OrderNum ASC) as TableRowNum,
         FirstName,
         LastName
  From   Users
)
Select Count(*) from query

我尝试将它们组合在一起(即:定义CTE,查询数据,然后查询Count,但是当我这样做时,响应第二个查询(Count),我收到一条错误消息“ Invalid
object name’query’” )。

有什么方法可以将这两个查询合并为一个,以节省往返数据库的费用?


问题答案:

如果您在2个不同的查询中都不要求使用它们,则可以尝试

;with query as (
  Select Row_Number() over (Order By UserID ASC) as TableRowNum,
         FirstName,
         LastName
  From   Users
),
totalCount AS (
    SELECT COUNT(1) Total FROM query
)
Select  query.*,
        Total
from    query, totalCount 
where   TableRowNum 
between 1 and 25 
Order By TableRowNum ASC

如果确实需要2个不同的查询,请使用表var

DECLARE @User TABLE(
        TableRowNum INT,
        FirstName VARCHAR(50),
        LastName VARCHAR(50)
)
;with query as (
  Select Row_Number() over (Order By UserID ASC) as TableRowNum,
         FirstName,
         LastName
  From   Users
)
INSERT INTO @User
SELECT  TableRowNum,
        FirstName,
        LastName
FROM    query

SELECT  *
FROM    @User
where   TableRowNum 
between 1 and 25 
Order By TableRowNum ASC

SELECT COUNT(1) FROM @User


 类似资料:
  • 如何在不包含连续子字符串baa的字母表{a,b,c}上表达正则表达式?

  • 我在写一个方法,它将返回一个区域数据列表,我在做以下方式,但得到错误 我正在犯错误 在线regionData=CountriesSo.Stream().Map(C->I18NFacade.GetRegionsForCountryIso(c)).Collect(Collectors.ToList()); 函数i18nfacade.getRegionsForCountryIso(c)返回了一个区域数据

  • 我的Java程序中有这个正则表达式 我也想在正则表达式中包含[和]。我也尝试使用转义字符,但没有成功。如何将这些字符添加到我的正则表达式中? 使用此示例 我试过\[和[,它不工作 上一次运行上述代码时,输出<code>Test:false

  • 问题内容: 假设我有一个通用接口: 和方法sort: 我可以调用此方法并将lambda表达式作为参数传递: 那会很好的。 但是现在,如果我将接口设为非泛型,并且将方法设为泛型: 然后像这样调用: 它不会编译。它在lambda表达式中显示错误: “目标方法是通用的” 好的,当我使用编译时,它显示以下错误: 从此错误消息看来,编译器似乎无法推断类型参数。是这样吗 如果是,那为什么会这样呢? 我尝试了各

  • 问题内容: 我有使用WITH子句几个查询或公用表表达式,用UNION ALL语句来描述与SQL服务器的树形结构通过表再次出现在这里。如果我创建相同的VIEW而不是将它包含在WITH子句中,并在每次运行查询时生成它,我会在性能上有所不同吗?因为在多个查询中使用视图,所以实际上创建视图通常被认为是一种好的做法吗? 问题答案: 您正在查看的是Common Table Expression,而不是View

  • 我最近在阅读一篇关于数据结构的文档时遇到了这个问题。 "处理内缀符号的算法在时间和空间消耗方面可能是困难和昂贵的"。 算术表达式可以用前缀表示法或后缀表示法编写,而不改变表达式的本质或输出。我关注的是: > 对于给定的表达式,在使用中缀表示法与前缀或后缀表示法处理表达式时,在内存空间和处理时间方面是否存在显著差异? 通用编程语言如何处理中缀表达式? I.他们是直接处理它们,还是 二.在处理它们之前