none
sql 数据列表底部的统计信息,怎么做 RRS feed

  • 问题

  • 如上图,目前,底部统计的是 满足条件的 当前页的数据,如何做到 底部统计的是 满足条件 的所有 数据 呢?


    开心了就笑,不开心了就过会儿再笑

    2013年9月18日 8:51

答案

  • 您好,
    您可以使用CTE做好分頁之後再加入union來將分頁的總合加進去,如下,

    USE tempdb
    GO
    --drop table #t1;
    
    CREATE TABLE #t1
    (
    [Id] INT
    ,[票] NVARCHAR(20)
    ,[全價] MONEY 
    ,[票面總價] MONEY 
    , [優惠後總價] MONEY 
    );
    DELETE FROM #t1;
    
    INSERT INTO #t1 VALUES(1,'票1', 2250, 2250, 2183);
    INSERT INTO #t1 VALUES(2,'票2', 1100, 1100, 1100);
    INSERT INTO #t1 VALUES(3,'票3', 1590, 1600, 1600);
    INSERT INTO #t1 VALUES(4,'票4', 980, 830, 830);
    INSERT INTO #t1 VALUES(5,'票5', 1540, 620, 596);
    INSERT INTO #t1 VALUES(6,'票6', 600, 600, 566);
    INSERT INTO #t1 VALUES(7,'票7', 700, 700, 677);
    INSERT INTO #t1 VALUES(8,'票8', 800, 800, 788);
    INSERT INTO #t1 VALUES(9,'票9', 900, 900, 899);
    INSERT INTO #t1 VALUES(10,'票10', 1000, 1000, 910);
    
    
    DECLARE @PageNumber INT
    DECLARE @PageSize INT
    -- Assume we need page 1 i.e. records from 1-5
    SELECT  @PageNumber = 1
    SELECT  @PageSize = 5
    ;WITH CTEPageing
    AS
    (
    SELECT  *
    FROM    ( SELECT    RowId = ROW_NUMBER() OVER ( ORDER BY [Id] ) ,
                        *,
    					0 AS SortOrder 
              FROM      #t1
            ) A
    WHERE   A.RowId > ( ( @PageNumber - 1 ) * @PageSize )
    AND A.RowId <= ( ( @PageNumber ) * @PageSize )
    )
    SELECT * FROM CTEPageing
    UNION ALL
    SELECT -1 AS RowId, -1 AS Id, N'合計', SUM([全價]), SUM([票面總價]), SUM([優惠後總價]), 1
    FROM CTEPageing
    ORDER BY SortOrder
    
     

    請您再依需求調整吧!


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    2013年9月20日 2:24

全部回复

  • LZ的意思是要统计全价+票面总价+优惠后总价吗?

    三个列的和?

    DECLARE @a INT
    SELECT @a=1+2+5
    SELECT @a

    DECLARE @a INT
    SELECT @a=全价+票面总价+优惠后总价
    SELECT @a



    2013年9月18日 10:36
  • 谢谢。你好,比如我的数据有10,而截图是第一页的数据,可以看出 下面的每一列的合计 刚好是 上面5行每一列的和。而我需要做的是 下面每一列的合计 统计的10页的总合计,也是针对每一列进行统计的。

    不知道这么说,可否清楚


    开心了就笑,不开心了就过会儿再笑

    2013年9月19日 12:35
  • 就算十页的总合计也是使用

    DECLARE @a INT
    SELECT @a=第一页全价+第二页全价+第三页全价+。。。。
    SELECT @a
    
    DECLARE @a INT
    SELECT @a=第一页票面总价+第二页票面总价+第三页票面总价+。。。。
    SELECT @a
    
    
    DECLARE @a INT
    SELECT @a=第一页优惠后总价+第二页优惠后总价+第三页优惠后总价+。。。。
    SELECT @a

    不过我觉得LZ这个问题应该属于程序逻辑,不属于SQLSERVER逻辑

    LZ可以到C#板块提问的

    ASP.NET与AJAX

    http://social.msdn.microsoft.com/Forums/zh-CN/home?forum=295

    C#

    http://social.msdn.microsoft.com/Forums/zh-CN/home?forum=visualcshartzhchs

    2013年9月19日 15:29
  • 您好,
    您可以使用CTE做好分頁之後再加入union來將分頁的總合加進去,如下,

    USE tempdb
    GO
    --drop table #t1;
    
    CREATE TABLE #t1
    (
    [Id] INT
    ,[票] NVARCHAR(20)
    ,[全價] MONEY 
    ,[票面總價] MONEY 
    , [優惠後總價] MONEY 
    );
    DELETE FROM #t1;
    
    INSERT INTO #t1 VALUES(1,'票1', 2250, 2250, 2183);
    INSERT INTO #t1 VALUES(2,'票2', 1100, 1100, 1100);
    INSERT INTO #t1 VALUES(3,'票3', 1590, 1600, 1600);
    INSERT INTO #t1 VALUES(4,'票4', 980, 830, 830);
    INSERT INTO #t1 VALUES(5,'票5', 1540, 620, 596);
    INSERT INTO #t1 VALUES(6,'票6', 600, 600, 566);
    INSERT INTO #t1 VALUES(7,'票7', 700, 700, 677);
    INSERT INTO #t1 VALUES(8,'票8', 800, 800, 788);
    INSERT INTO #t1 VALUES(9,'票9', 900, 900, 899);
    INSERT INTO #t1 VALUES(10,'票10', 1000, 1000, 910);
    
    
    DECLARE @PageNumber INT
    DECLARE @PageSize INT
    -- Assume we need page 1 i.e. records from 1-5
    SELECT  @PageNumber = 1
    SELECT  @PageSize = 5
    ;WITH CTEPageing
    AS
    (
    SELECT  *
    FROM    ( SELECT    RowId = ROW_NUMBER() OVER ( ORDER BY [Id] ) ,
                        *,
    					0 AS SortOrder 
              FROM      #t1
            ) A
    WHERE   A.RowId > ( ( @PageNumber - 1 ) * @PageSize )
    AND A.RowId <= ( ( @PageNumber ) * @PageSize )
    )
    SELECT * FROM CTEPageing
    UNION ALL
    SELECT -1 AS RowId, -1 AS Id, N'合計', SUM([全價]), SUM([票面總價]), SUM([優惠後總價]), 1
    FROM CTEPageing
    ORDER BY SortOrder
    
     

    請您再依需求調整吧!


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    2013年9月20日 2:24