【发布时间】:2021-03-15 08:03:41
【问题描述】:
我试图仅显示 rownum 介于 0 和 24 之间的行。这将是动态的,并且范围将根据用户所在的页面而改变。由于某种原因,下面的查询永远执行并且永远不会返回结果。如果我删除这个:
WHERE
rownum >= 0 AND rownum < 24
ORDER BY
rownum;
查询然后毫无问题地执行。
我怎样才能修复这个查询,让它做我想做的事?为什么这个不起作用?:
WITH cs AS
(
SELECT
ROW_NUMBER() OVER (ORDER BY [RCA].[I_UID]) AS rownum,
[RCA].[I_UID],
[RCA].[I_TYPE_UID],
[RCA].[I_I_C],
[RCA].[L_D],
[RCA].[SOME_DATE],
[RCA].[ANOTHER_DATE],
[RCA].[ANOTHER_DATED],
[RCA].[L_ED_DATE],
[RCA].[L_ED_USER_UID],
[RCA].[PNT_UID],
[RCA].[FA_UID],
[RCA].[D_LE],
[RCA].[DIGITAL_A],
[RCA].[LOK],
[RCA].[KILP],
[RCA].[LKP],
[RCA].[BLT],
[RCA].[LAT],
[RCA].[JUT],
[RCA].[S_UID],
[S_A].[FAT_UID],
[S_A].[RD_UID],
[S_A].[S_CODE],
[S_A].[S_NAME],
[S_A].[S_TYPE_UID],
[S_A].[S_LENGTH],
[S_A].[CUP_LIMIT],
[S_A].[S_N_C],
[S_A].[S_N_D_JCT_TYPE_UID],
[S_A].[S_N_D_NAME],
[S_A].[ENC],
[S_A].[ENJT_UID],
[S_A].[ENT_NAME],
[S_A].[N_UID],
[S_A].[R_UID],
[S_A].[A_UID],
[S_A].[D_UID],
[S_A].[DI_UID],
[S_A].[SU_UID],
[S_A].[BS_T],
[S_A].[CLU_UID],
[S_A].[MH_UID],
[S_A].[EN_UID],
[S_A].[OWN_UID],
[S_A].[AG_UID],
[S_A].[DPT],
[S_A].[NPI],
[S_A].[R_W_C],
[S_A].[S_L_UID],
[S_A].[S_LF_T_CODE],
[S_A].[FT_I_UID],
[S_A].[F_O_UID],
[S_A].[DRN_C],
[S_A].[SUY_UID],
[S_A].[S_L_CS],
[S_A].[SUY],
[S_A].[MAX],
[S_A].[STRA_NO],
[S_A].[NOP],
[S_A].[CWXSP],
[S_A].[OFFCWXSP],
[S_A].[UK_M_HR_UID],
[S_A].[FWAY_M_HR_UID],
[S_A].[CYCLE_M_HR_UID],
[S_A].[UK_R_ROU_UID],
[S_A].[UK_R_DOT_CLUIFICATION_UID],
[S_A].[L_UID],
[S_A].[LOCAL_HR],
[S_A].[PG_DATE],
[S_A].[LCA_DIS_UID],
[S_A].[CWT],
[S_A].[LCA_OCC_L_UID],
[S_A].[SKL],
[S_A].[SKG]
FROM
RCA
LEFT OUTER JOIN
S_A ON RCA.S_uid = S_A.S_uid
WHERE
[RCA].[SOME_DATE] <= '02 december 2020'
AND [RCA].[ANOTHER_DATE] >= '02 december 2020'
AND [S_A].[SOME_DATE] <= '02 december 2020'
AND [S_A].[ANOTHER_DATE] >= '02 december 2020'
)
SELECT *
FROM cs
WHERE
rownum >= 0 AND rownum < 24
ORDER BY
rownum;
更新:
我已经使用 OFFSET / FETCH 更新了我的查询以进行分页。只有当我按降序排序时,查询才会成功执行。将其更改为ORDER BY rownum ASC 时,查询将永远执行而不返回任何结果。这是有效的查询,但是我要求结果按升序排列:
SELECT
[RCA].[I_UID],
[RCA].[I_TYPE_UID],
[RCA].[I_I_C],
[RCA].[L_D],
[RCA].[SOME_DATE],
[RCA].[ANOTHER_DATE],
[RCA].[ANOTHER_DATED],
[RCA].[L_ED_DATE],
[RCA].[L_ED_USER_UID],
[RCA].[PNT_UID],
[RCA].[FA_UID],
[RCA].[D_LE],
[RCA].[DIGITAL_A],
[RCA].[LOK],
[RCA].[KILP],
[RCA].[LKP],
[RCA].[BLT],
[RCA].[LAT],
[RCA].[JUT],
[RCA].[S_UID],
[S_A].[FAT_UID],
[S_A].[RD_UID],
[S_A].[S_CODE],
[S_A].[S_NAME],
[S_A].[S_TYPE_UID],
[S_A].[S_LENGTH],
[S_A].[CUP_LIMIT],
[S_A].[S_N_C],
[S_A].[S_N_D_JCT_TYPE_UID],
[S_A].[S_N_D_NAME],
[S_A].[ENC],
[S_A].[ENJT_UID],
[S_A].[ENT_NAME],
[S_A].[N_UID],
[S_A].[R_UID],
[S_A].[A_UID],
[S_A].[D_UID],
[S_A].[DI_UID],
[S_A].[SU_UID],
[S_A].[BS_T],
[S_A].[CLU_UID],
[S_A].[MH_UID],
[S_A].[EN_UID],
[S_A].[OWN_UID],
[S_A].[AG_UID],
[S_A].[DPT],
[S_A].[NPI],
[S_A].[R_W_C],
[S_A].[S_L_UID],
[S_A].[S_LF_T_CODE],
[S_A].[FT_I_UID],
[S_A].[F_O_UID],
[S_A].[DRN_C],
[S_A].[SUY_UID],
[S_A].[S_L_CS],
[S_A].[SUY],
[S_A].[MAX],
[S_A].[STRA_NO],
[S_A].[NOP],
[S_A].[CWXSP],
[S_A].[OFFCWXSP],
[S_A].[UK_M_HR_UID],
[S_A].[FWAY_M_HR_UID],
[S_A].[CYCLE_M_HR_UID],
[S_A].[UK_R_ROU_UID],
[S_A].[UK_R_DOT_CLUIFICATION_UID],
[S_A].[L_UID],
[S_A].[LOCAL_HR],
[S_A].[PG_DATE],
[S_A].[LCA_DIS_UID],
[S_A].[CWT],
[S_A].[LCA_OCC_L_UID],
[S_A].[SKL],
[S_A].[SKG]
FROM
RCA
INNER JOIN
S_A ON RCA.S_uid = S_A.S_uid
WHERE
[RCA].[SOME_DATE] <= '02 december 2020'
AND [RCA].[ANOTHER_DATE] >= '02 december 2020'
AND [S_A].[SOME_DATE] <= '02 december 2020'
AND [S_A].[ANOTHER_DATE] >= '02 december 2020'
ORDER BY
[RCA].[I_UID] DESC
OFFSET 0 ROWS
FETCH FIRST 24 ROWS ONLY;
最终工作解决方案:
;WITH cs AS
(
SELECT
t.S_UID,
t.I_UID,
t.[I_TYPE_UID],
t.[I_I_C],
t.[L_D],
t.[SOME_DATE],
t.[ANOTHER_DATE],
t.[ANOTHER_DATED],
t.[L_ED_DATE],
t.[L_ED_USER_UID],
t.[PNT_UID],
t.[FA_UID],
t.[D_LE],
t.[DIGITAL_A],
t.[LOK],
t.[KILP],
t.[LKP],
t.[BLT],
t.[LAT],
t.[JUT],
S_A.[FAT_UID],
S_A.[RD_UID],
S_A.[S_CODE],
S_A.[S_NAME],
S_A.[S_TYPE_UID],
S_A.[S_LENGTH],
S_A.[CUP_LIMIT],
S_A.[S_N_C],
S_A.[S_N_D_JCT_TYPE_UID],
S_A.[S_N_D_NAME],
S_A.[ENC],
S_A.[ENJT_UID],
S_A.[ENT_NAME],
S_A.[N_UID],
S_A.[R_UID],
S_A.[A_UID],
S_A.[D_UID],
S_A.[DI_UID],
S_A.[SU_UID],
S_A.[BS_T],
S_A.[CLU_UID],
S_A.[MH_UID],
S_A.[EN_UID],
S_A.[OWN_UID],
S_A.[AG_UID],
S_A.[DPT],
S_A.[NPI],
S_A.[R_W_C],
S_A.[S_L_UID],
S_A.[S_LF_T_CODE],
S_A.[FT_I_UID],
S_A.[F_O_UID],
S_A.[DRN_C],
S_A.[SUY_UID],
S_A.[S_L_CS],
S_A.[SUY],
S_A.[MAX],
S_A.[STRA_NO],
S_A.[NOP],
S_A.[CWXSP],
S_A.[OFFCWXSP],
S_A.[UK_M_HR_UID],
S_A.[FWAY_M_HR_UID],
S_A.[CYCLE_M_HR_UID],
S_A.[UK_R_ROU_UID],
S_A.[UK_R_DOT_CLUIFICATION_UID],
S_A.[L_UID],
S_A.[LOCAL_HR],
S_A.[PG_DATE],
S_A.[LCA_DIS_UID],
S_A.[CWT],
S_A.[LCA_OCC_L_UID],
S_A.[SKL],
S_A.[SKG]
FROM
RCA AS t
LEFT OUTER JOIN
S_A ON t.S_UID = S_A.S_UID
WHERE
t.[SOME_DATE] <= '02 december 2020'
AND t.[ANOTHER_DATE] >= '02 december 2020'
ORDER BY t.[I_UID]
OFFSET 24 * 0 ROWS
FETCH NEXT 24 ROWS ONLY
)
SELECT *
FROM cs
ORDER BY
cs.I_UID
【问题讨论】:
-
这对我有用:dbfiddle.uk/…
-
奇怪,是一样的。知道什么可能导致上述不起作用吗?如果我删除最终选择的 WHERE 部分,则查询有效
-
你有多少数据?你不是说不行,你解释说太费时间了?
-
刚刚超过 72000 行。如果我删除语句的 WHERE 部分,执行大约需要 7 到 11 秒。使用 WHERE 的查询,它不会出错,它只是永远执行(我已经将它放置了 30 分钟,它仍在执行)
-
经常使用
OFFSET/FETCH进行分页。
标签: sql ssms sql-server-2014 row-number