SQL 将子查询 'Total Records' 返回给外部查询

标签 sql xml sql-server-2008 subquery

这让我有点难过,我试图从这个 SQL 查询中获取我的顶级(根)节点 XML 中的总数:

    SELECT COUNT(*) OVER() as '@totalCount', (
        SELECT COUNT(*) OVER() as totalCount, [Title], [Year], [Type], [Poster]
        FROM movies As result where CONTAINS(Title, @Title) Order by [Weight] DESC
        OFFSET ((@PageNumber - 1) * @RowspPage) ROWS
        FETCH NEXT @RowspPage ROWS ONLY
        FOR XML AUTO, type
    ) 
    FOR XML PATH('root')

显然 COUNT(*) OVER() 只返回“1”,因为它是在顶层而不是在子查询中执行的。但我只想在根节点中显示一次,而不是针对每个结果重复显示。

result of code

如有任何帮助,我们将不胜感激。

最佳答案

编辑:这里是一个包含通用数据的工作示例:

;with myCTE as
(
    select *
    from sys.objects
)
select (select count(*) from myCTE) as [@Counter]
    ,(
       SELECT myCTE.object_id AS id
             ,mycte.name AS name 
       from myCTE
       for xml path('object'),TYPE
      )       
for xml path('test')

您可能会尝试将您的查询转移到 CTE 中并将其放入如下内容:

;WITH MyQueryAsCTE AS
(
    SELECT [Title], [Year], [Type], [Poster]
    FROM movies As result where CONTAINS(Title, @Title) Order by [Weight] DESC
    OFFSET ((@PageNumber - 1) * @RowspPage) ROWS
    FETCH NEXT @RowspPage ROWS ONLY
)
SELECT  (SELECT Count(*) FROM MyQueryAsCTE) as '@totalFound'
       ,[Title] AS [Movie/Title] 
       ,[Year] AS [Movie/Year]
       ,[Type] AS [Movie/Type]
       ,[Poster] AS [Movie/Poster]
FROM MyQueryAsCTE
FOR XML PATH('root')

关于SQL 将子查询 'Total Records' 返回给外部查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34863704/

相关文章:

mysql - 如何生成随机代码,并多次运行sql

java - 如何使用 MYSQL 将插入的值更改为大写

html - nokogiri:xml 到 html

android - 在横向模式下视频 View 不是全屏

c# - 在 C#/Asp.net 中编辑保存的 Microsoft Word 文档

sql - 在SQL(Hive)中使用collect_list函数汇总用户序列

java - Oracle 默认按行为排序

java - Jetty 中的 JSR-356 javax websockets(嵌入式和非嵌入式)

sql-server - 如果 SQL Server 作业步骤在执行过程中被修改,会发生什么情况

sql - SQL Server 的日期时间转换问题