SQL Server: введите строку идентификаторов и верните строку значений

Попробуйте следующее: -

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. Возможно, вы захотите обновить свой вопрос информацией о другой таблице.

2
задан marc_s 16 January 2019 в 05:23
поделиться

2 ответа

Если вы используете 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]._'
    )
, '');
0
ответ дан e_i_pi 16 January 2019 в 05:23
поделиться

Существует также опция грубой силы

Пример

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
0
ответ дан John Cappelletti 16 January 2019 в 05:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: