Попробуйте следующее: -
SET @start_res = 20150301;
SET @finish_res= 20150501;
SET @finish_check= 20150801;
SET @start_check= 20150301;
SET @daily_hos= 3;
SELECT
(SELECT COUNT(DAY_IN) AS arr FROM t_hospital WHERE
DAY_IN between @start_check and @finish_check and
RES_DATE between @start_res and @finish_res and
ID_daily_hos =@daily_hos) e,
(SELECT COUNT(PAT_STATUS) AS ONG1 FROM t_hospital WHERE
PAT_STATUS like '%ong%' and
DAY_IN between @start_check and @finish_check and
RES_DATE between @start_res and @finish_res and
ID_daily_hos =@daily_hos) a,
(SELECT COUNT(PAT_STATUS) AS RTED FROM t_hospital WHERE
PAT_STATUS like '%rtde%' and
DAY_IN between @start_check and @finish_check and
RES_DATE between @start_res and @finish_res and
ID_daily_hos =@daily_hos)b,
(SELECT COUNT(PAT_STATUS) AS POLI FROM t_hospital WHERE
PAT_STATUS like '%pol%' and
DAY_IN between @start_check and @finish_check and
RES_DATE between @start_res and @finish_res and
ID_daily_hos =@daily_hos) c,
(SELECT COUNT(PAT_STATUS) AS para FROM t_hospital WHERE
PAT_STATUS like '%para%' and
DAY_IN between @start_check and @finish_check and
RES_DATE between @start_res and @finish_res and
ID_daily_hos =@daily_hos) d
В вашем вопросе упоминается о соединении двух таблиц, но, похоже, имеется только t_hospital
. Возможно, вы захотите обновить свой вопрос информацией о другой таблице.
Если вы используете SQL Server 2016 или выше, вы можете использовать функцию STRING_SPLIT
, чтобы превратить разделенную строку @DateIDs
в таблицу, соединить ее с вашей таблицей дат (которую я назвал my_date_table
с полями). id
и date_value
), а затем объединить даты с помощью трюка с участием JSON_VALUE
и REPLACE
(найдено здесь ):
DROP TABLE IF EXISTS #dates;
SELECT
CONVERT(VARCHAR(10), my_date_table.date_field, 101) AS date_string
INTO #dates
FROM my_date_table
INNER JOIN (
SELECT [value]
FROM STRING_SPLIT(@DateIDs, '|')
) date_ids
ON date_ids.[value] = my_date_table.id
;
SET @returnDates = COALESCE(
JSON_VALUE(
REPLACE(
(
SELECT
_ = date_string
FROM #dates
FOR JSON PATH
)
,'"},{"_":"',', '),'$[0]._'
)
, '');
Существует также опция грубой силы
Пример
Declare @S varchar(max) = '65|67|69'
Set @S='|'+@S+'|'
Select @S = replace(@S,concat('|',DateID,'|'),'|'+convert(varchar(10),EventDate,101)+'|')
From tblEventDates
Select replace(substring(@S,2,len(@S)-2),'|',', ')
Возвращает
01/15/2019, 01/16/2019, 01/17/2019