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来查询

 

 

你可能感兴趣的:(t-sql)