日期:2014-05-17  浏览次数:20636 次

SQL结果集没有ID求分页显示最好是高效一点的
--> 测试数据:#Table1
IF OBJECT_ID('TEMPDB.DBO.#Table1') IS NOT NULL DROP TABLE #Table1
GO 
CREATE TABLE #Table1([MID] VARCHAR(4),[PID] VARCHAR(8),[AA] INT)
INSERT #Table1
SELECT 'A001','A001-001',1 UNION ALL
SELECT 'A001','A001-002',0 UNION ALL
SELECT 'A001','A001-003',0 UNION ALL
SELECT 'A001','A001-004',0

--> 测试数据:#Table2
IF OBJECT_ID('TEMPDB.DBO.#Table2') IS NOT NULL DROP TABLE #Table2
GO 
CREATE TABLE #Table2([ID] INT,[QID] VARCHAR(4),[PID] VARCHAR(8),[DD] INT,[EE] INT)
INSERT #Table2
SELECT 1,'XX01','A001-001',1,1 UNION ALL
SELECT 2,'XX02','A001-002',0,0 UNION ALL
SELECT 3,'XX02','A001-003',0,0 UNION ALL
SELECT 4,'XX04','A001-003',0,0 UNION ALL
SELECT 5,'XX05','A001-003',1,1

--> 测试数据:#Table3
IF OBJECT_ID('TEMPDB.DBO.#Table3') IS NOT NULL DROP TABLE #Table3
GO 
CREATE TABLE #Table3([ID] INT,[QID] VARCHAR(4),[Name] VARCHAR(4))
INSERT #Table3
SELECT 1,'XX02','张三' UNION ALL
SELECT 2,'XX04','李四' UNION ALL
SELECT 3,'XX05','王五' UNION ALL
SELECT 4,'XX06','赵六'
--------------开始查询--------------------------




SELECT  d.[Name] , a.[PID] , d.[DD] , d.[EE] , a.[AA]
FROM    #Table1 a
LEFT JOIN (
           SELECT b.[PID] , c.[Name],b.[DD] , b.[EE] 
           FROM #Table2 b
   JOIN #Table3 c 
   ON b.[QID]= c.[QID]
  AND (b.[EE]=0 and b.[DD]=0)
          ) d
ON      a.[PID] = d.[PID]
WHERE   a.aa = 0 


----------------结果----------------------------
/* 
Name PID DD EE AA
张三 A001-002 0 0 0
张三 A001-003 0 0 0
李四 A001-003 0 0 0
NULL A001-004 NULL NULL 0

 */
求分页显示最好是高效一点的
sql

------解决方案--------------------
其实最好是基础表里面已经有相关的ID,那是最快的,不过这种情况比较极端,通常的做法是使用row_number来生成ID。
------解决方案--------------------
引用:
引用:
你要什么样的分页效果?这个必须要说明把。额,不好意思啊,很简单的分页,比如说一页显示2条...因为我实际数据库中的数据比这个多好多....而且结果集是没有id的...


就像2楼说的,这个要用row_number()生成一个新列,然后按照你给入的页码返回。
------解决方案--------------------
sql2005开始有row_number()
------解决方案--------------------
目前在用的,感觉不错,速度很好。


SELECT Identifier,ROW_NUMBER() OVER(order by Identifier desc) AS RowIndex INTO #tb1_1 FROM View_GoodsBrand WITH(NOLOCK)
WHERE

SET @SumCount=@@RowCount

IF(@SumCount%@PageSize=0)
BEGIN
SET @TotalPage=@SumCount/@PageSize
END
ELSE
BEGIN
SET @TotalPage=Round(@SumCount/@PageSize,0)+1