zoukankan      html  css  js  c++  java
  • T-sql 行转列,数据库查询分页

     1 USE [APS_Future_FT]
     2 GO
     3 /****** Object:  StoredProcedure [dbo].[A_CrudePrice]    Script Date: 2013/11/5 19:13:21 ******/
     4 SET ANSI_NULLS ON
     5 GO
     6 SET QUOTED_IDENTIFIER ON
     7 GO
     8 -- =============================================
     9 -- Author:        <Author,,Name>
    10 -- Create date: <Create Date,,>
    11 -- Description:    <Description,,>
    12 -- =============================================
    13 ALTER PROCEDURE [dbo].[A_CrudePrice]
    14 (
    15       @BeginDate DATETIME ,
    16       @EndDate DATETIME,
    17       @PageSize INT,
    18       @PageIndex INT,
    19       @TotalCount INT OUTPUT
    20 )
    21 AS
    22 BEGIN
    23     -- SET NOCOUNT ON added to prevent extra result sets from
    24     -- interfering with SELECT statements.
    25     SET NOCOUNT ON;
    26 
    27     DECLARE @CodeList NVARCHAR(max)
    28     DECLARE @str NVARCHAR(max)
    29     SET @CodeList =( SELECT DISTINCT '['+ iscp.CrudeStandard+'],'
    30                        FROM dbo.T_H_InternalStandardCrudePrice iscp
    31                        FOR XML PATH('')
    32                     )
    33     SET @CodeList = SUBSTRING(@CodeList,1,LEN(@CodeList)-1)
    34     PRINT @CodeList
    35 
    36             SELECT iscp.PriceDate,iscp.CrudeStandard,iscp.CrudeStandardPrice
    37             INTO #A
    38             FROM dbo.T_H_InternalStandardCrudePrice iscp
    39             WHERE iscp.PriceDate BETWEEN @BeginDate AND @EndDate
    40 
    41 
    42 SET @str = '
    43     SELECT Row=row_number() over(order by PriceDate desc), PriceDate,'+@CodeList+'
    44     FROM (
    45            select * from #A
    46          )AS A
    47     PIVOT ( sum(A.CrudeStandardPrice) FOR A.CrudeStandard IN ('+@CodeList+'    )
    48     )AS B'
    49 SET @str =' SELECT * INTO ##A
    50            FROM ('+@str+') as C'
    51 
    52     EXEC(@str)
    53     
    54     SELECT * 
    55     FROM ##A AS tempA
    56     WHERE tempA.Row BETWEEN @PageSize * @PageIndex AND @PageSize *(@PageIndex + 1)
    57 
    58     SELECT @TotalCount =( SELECT COUNT(*)
    59                       FROM ##A
    60                      )
    61 DROP TABLE #A
    62 DROP TABLE ##A
    63 
    64 END

    在T-sql中,可以使用row_number()函数来对整个查询结果排号,然后,根据所查询的PageSize和PageIndex来查询

  • 相关阅读:
    IE6-IE11兼容性问题列表及解决办法
    EJB--事务管理 .
    JDBC批处理---(java 对数据库的回滚) .
    redisb并发访问慢出现的问题
    redis其他问题
    多线程实现服务器端接收连接
    序列化作用
    redis的key过期时间
    nginx负载均衡和反向代理有什么区别
    nginx的负载均衡和反响代理配置
  • 原文地址:https://www.cnblogs.com/qizhelongdeyang/p/3413267.html
Copyright © 2011-2022 走看看