sudhakarthikeyan Ответов: 1

Когда я выполнить запрос показывает сообщение об ошибке недопустимый параметр rownum


SELECT dbo.fn_parsehtml(MCS_CASE_SUMMARY)
	,ROW_NUMBER() OVER (
		ORDER BY RRH_MR_NUM
		) AS RowNum
	,RRH_LOCATION_CD
	,RRH_MR_NUM
	,RRH_FIRST_NAME
	,RRH_PAT_SEX
	,RRH_REGN_DT
	,RRH_PAT_DOB
	,MCS_CRT_DTE
FROM MR_CASE_SUMMARY_HISTORY_2015
LEFT OUTER JOIN RE_REGISTRATION_HEADER ON MCS_MRD_NUMBER = rrh_mr_num
LEFT OUTER JOIN CO_PATIENT_ADDRESS_DETAIL ON RRH_COMM_ID = CPA_COMM_ID
	AND CPA_MAILING_ADDR = '1'
WHERE RowNum BETWEEN 1 AND 10



когда я выполнить этот запрос в SQL сервере

показывает ошибку следующим образом

Параметр rownum недопустимое имя столбца''

Что я уже пробовал:

выполните приведенный выше запрос в SQL server

1 Ответов

Рейтинг:
2

Bryian Tan

Возможно, вам придется использовать подзапрос или CTE, потому что ROW_NUMBER() вычисляется/применяется к каждой строке во время выполнения. Пример CTE (Common Table Expression)

WITH temp as (
	SELECT dbo.fn_parsehtml(MCS_CASE_SUMMARY)
		,ROW_NUMBER() OVER (
			ORDER BY RRH_MR_NUM
			) AS RowNum
		,RRH_LOCATION_CD
		,RRH_MR_NUM
		,RRH_FIRST_NAME
		,RRH_PAT_SEX
		,RRH_REGN_DT
		,RRH_PAT_DOB
		,MCS_CRT_DTE
	FROM MR_CASE_SUMMARY_HISTORY_2015
	LEFT OUTER JOIN RE_REGISTRATION_HEADER ON MCS_MRD_NUMBER = rrh_mr_num
	LEFT OUTER JOIN CO_PATIENT_ADDRESS_DETAIL ON RRH_COMM_ID = CPA_COMM_ID
		AND CPA_MAILING_ADDR = '1'
) SELECT * FROM temp
	WHERE RowNum BETWEEN 1 AND 10


или подзапрос
SELECT * FROM
(
	SELECT dbo.fn_parsehtml(MCS_CASE_SUMMARY)
		,ROW_NUMBER() OVER (
			ORDER BY RRH_MR_NUM
			) AS RowNum
		,RRH_LOCATION_CD
		,RRH_MR_NUM
		,RRH_FIRST_NAME
		,RRH_PAT_SEX
		,RRH_REGN_DT
		,RRH_PAT_DOB
		,MCS_CRT_DTE
	FROM MR_CASE_SUMMARY_HISTORY_2015
	LEFT OUTER JOIN RE_REGISTRATION_HEADER ON MCS_MRD_NUMBER = rrh_mr_num
	LEFT OUTER JOIN CO_PATIENT_ADDRESS_DETAIL ON RRH_COMM_ID = CPA_COMM_ID
		AND CPA_MAILING_ADDR = '1'
) r
	WHERE r.RowNum BETWEEN 1 AND 10


ссылка: Почему вы не можете использовать ROW_NUMBER() в предложении WHERE - SQL Theater[^]