34,592
社区成员
发帖
与我相关
我的任务
分享
select * from (
SELECT ROW_NUMBER() OVER(ORDER BY AGT_CODE DESC) AS REC_NUM,* FROM (
SELECT INT_ORG, AGT_CODE, AGT_STATUS, '1' AS CLS
FROM AGENT WHERE
AGT_CODE NOT IN (SELECT OPEN_AGENT FROM CUSTOMER)
AND AGT_CODE NOT IN (SELECT USER_CODE FROM AGENT_FUNDBIZ)
AND AGT_STATUS = '0'
UNION ALL
SELECT A.INT_ORG, A.AGT_CODE, A.AGT_STATUS, '2' AS CLS
FROM AGENT A, AGENT_RELATION C WHERE
A.AGT_CODE = C.USER_CODE
AND A.AGT_CODE NOT IN (SELECT OPEN_AGENT FROM CUSTOMER)
AND A.AGT_STATUS = '9' ) D
) E WHERE E.REC_NUM BETWEEN 1 AND 900
select IDENTITY(int, 1,1) AS REC_NUM,
*
into #temp
from(
SELECT INT_ORG,
AGT_CODE,
AGT_STATUS,
'1' AS CLS
FROM AGENT B
WHERE NOT EXISTS (SELECT OPEN_AGENT
FROM CUSTOMER WHERE OPEN_AGENT=B.AGT_CODE)
AND NOT EXISTS (SELECT USER_CODE
FROM AGENT_FUNDBIZ WHERE USER_CODE=B.AGT_CODE)
AND AGT_STATUS = '0'
UNION ALL
SELECT A.INT_ORG,
A.AGT_CODE,
A.AGT_STATUS,
'2' AS CLS
FROM AGENT A,
AGENT_RELATION C
WHERE A.AGT_CODE = C.USER_CODE
AND NOT EXISTS (SELECT OPEN_AGENT
FROM CUSTOMER WHERE OPEN_AGENT=A.AGT_CODE)
AND A.AGT_STATUS = '9') D
) as E
order by E.AGT_CODE
select * from #temp where REC_NUM>= 1 AND REC_NUM<=900
SELECT *
FROM ( SELECT ROW_NUMBER() OVER ( ORDER BY AGT_CODE DESC ) AS REC_NUM ,
*
FROM ( SELECT INT_ORG ,
AGT_CODE ,
AGT_STATUS ,
'1' AS CLS
FROM AGENT
WHERE NOT EXISTS ( SELECT 1
FROM CUSTOMER
WHERE agent.AGT_CODE = OPEN_AGENT )
AND NOT EXISTS ( SELECT 1
FROM AGENT_FUNDBIZ
WHERE agent.AGT_CODE = USER_CODE )
AND AGT_STATUS = '0'
UNION ALL
SELECT A.INT_ORG ,
A.AGT_CODE ,
A.AGT_STATUS ,
'2' AS CLS
FROM AGENT A ,
AGENT_RELATION C
WHERE A.AGT_CODE = C.USER_CODE
AND NOT EXISTS ( SELECT 1
FROM CUSTOMER
WHERE agent.AGT_CODE = OPEN_AGENT )
AND A.AGT_STATUS = '9'
) D
) E
WHERE E.REC_NUM BETWEEN 1 AND 900
SELECT *
FROM (SELECT Row_number()
OVER(
ORDER BY AGT_CODE DESC) AS REC_NUM,
*
FROM (SELECT INT_ORG,
AGT_CODE,
AGT_STATUS,
'1' AS CLS
FROM AGENT B
WHERE NOT EXISTS (SELECT OPEN_AGENT
FROM CUSTOMER WHERE OPEN_AGENT=B.AGT_CODE)
AND NOT EXISTS (SELECT USER_CODE
FROM AGENT_FUNDBIZ WHERE USER_CODE=B.AGT_CODE)
AND AGT_STATUS = '0'
UNION ALL
SELECT A.INT_ORG,
A.AGT_CODE,
A.AGT_STATUS,
'2' AS CLS
FROM AGENT A,
AGENT_RELATION C
WHERE A.AGT_CODE = C.USER_CODE
AND NOT EXISTS (SELECT OPEN_AGENT
FROM CUSTOMER WHERE OPEN_AGENT=A.AGT_CODE)
AND A.AGT_STATUS = '9') D) E
WHERE E.REC_NUM>= 1 AND E.REC_NUM<=900
--- WHERE E.REC_NUM BETWEEN 1 AND 900 查看执行计划其实优化器最后实际将其转换为了 >= and <= 这种方式。
--NOT IN 不会执行索引查找 而 NOT EXISTS 是会执行索引查找 操作的