sudhakarthikeyan Ответов: 1

Вывод, который я не получаю в запросе SQL server


приведенный ниже запрос работает

WITH MyCte AS 
(
select 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,AGE=DATEDIFF(YY,RRH_PAT_DOB,MCS_CRT_DT),dbo.fn_parsehtml (MCS_CASE_SUMMARY) AS MCS_CASE_SUMMARY,
MCS_CRT_DT,MCS_CRT_UID, CPA_ADDR_1,CPA_ADDR_2,CPA_ADDR_3,CPA_ADDR_AREA,CPA_ADDR_CITY,
CPA_STATE_CD,CPA_COUNTRY_CD,CPA_PIN_CODE 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 MyCte
WHERE month(MCS_CRT_DT)=04 and day(MCS_CRT_DT) between 01 and 02


приведенный ниже запрос не работает, когда я добавляю между for month и day output shows emoty


WITH MyCte AS 
(
select 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,AGE=DATEDIFF(YY,RRH_PAT_DOB,MCS_CRT_DT),dbo.fn_parsehtml (MCS_CASE_SUMMARY) AS MCS_CASE_SUMMARY,
MCS_CRT_DT,MCS_CRT_UID, CPA_ADDR_1,CPA_ADDR_2,CPA_ADDR_3,CPA_ADDR_AREA,CPA_ADDR_CITY,
CPA_STATE_CD,CPA_COUNTRY_CD,CPA_PIN_CODE 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 MyCte
WHERE RowNum BETWEEN 1 AND 10 and month(MCS_CRT_DT)=04 and day(MCS_CRT_DT) between 01 and 02


я использую оба между Для rownum и месяца и дня.

в чем ошибка в моем приведенном выше sql запросе

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

Как и выше...

CHill60

Нам будет намного проще помочь вам, если вы покажете некоторые примеры данных из таблиц, которые вы используете

Richard Deeming

Если он не возвращает никаких данных, то первые 10 строк, возвращенных из вашего CTE, не относятся ни к 1, ни к 2 апреля.

Вам нужно будет посмотреть на свои данные, чтобы понять, почему. Мы не можем сделать это для вас, потому что у нас нет доступа к вашей базе данных.

Запустите рабочий запрос и посмотрите на RowNum колонка в выводе. Проблема должна быть достаточно очевидной.

Santosh kumar Pithani

Ваш запрос верен, но вы должны знать, как работают фильтры с('AND','OR')

1 Ответов

Рейтинг:
2

Rahul_Pandit

попробовать это

SELECT * FROM 
(
select 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,AGE=DATEDIFF(YY,RRH_PAT_DOB,MCS_CRT_DT),dbo.fn_parsehtml (MCS_CASE_SUMMARY) AS MCS_CASE_SUMMARY,
MCS_CRT_DT,MCS_CRT_UID, CPA_ADDR_1,CPA_ADDR_2,CPA_ADDR_3,CPA_ADDR_AREA,CPA_ADDR_CITY,
CPA_STATE_CD,CPA_COUNTRY_CD,CPA_PIN_CODE 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 month(MCS_CRT_DT)=04 and day(MCS_CRT_DT) between 01 and 02 
)  MyCte
WHERE RowNum BETWEEN 1 AND 10