Использование случая, когда &, возможно, "Lead" или "Lag" - PullRequest
0 голосов
/ 18 декабря 2018

Я знаю, что я хочу, чтобы данные отображались, но, похоже, не могу понять правильную логику для этого.Пример ниже.

Набор данных

**'ID', 'Admission Mth',    'Admission Yr', 'Category', 'Facility', 'ID_Yr_Cat',    'ID_Yr_Cat_Fac',**
'123456',   'Jan',  '2017', 'Hospital', 'NYMC', '123456-2017-Hospital', '123456-2017-Hospital-NYMC',
'123456',   'Jul',  '2017', 'Hospital', 'NYMC', '123456-2017-Hospital', '123456-2017-Hospital-NYMC',
'123456',   'Oct',  '2018', 'Hospital', 'NYMC', '123456-2018-Hospital', '123456-2018-Hospital-NYMC',
'123456',   'Nov',  '2018', 'Hospital', 'NJMC', '123456-2018-Hospital', '123456-2018-Hospital-NJMC',
'789123',   'Feb',  '2017', 'Clinic',   'Philly Clinic',    '789123-2017-Clinic',   '789123-2017-Clinic-Philly Clinic',
'987654',   'May',  '2018', 'Hospital', 'PAMC', '987654-2018-Hospital', '987654-2018-Hospital-PAMC',
'456123',   'Sept', '2017', 'Clinic',   'Philly Clinic',    '456123-2017-Clinic',   '456123-2017-Clinic-Philly Clinic',
'456123',   'Aug',  '2018', 'Hospital', 'NYMC', '456123-2018-Hospital', '456123-2018-Hospital-NYMC',
'456123',   'Nov',  '2018', 'Hospital', 'NYMC', '456123-2018-Hospital', '456123-2018-Hospital-NYMC',
'456123',   'Dec',  '2018', 'Hospital', 'NJMC', '456123-2018-Hospital', '456123-2018-Hospital-NJMC'

Я хочу, чтобы в окончательных результатах отображались флаги "1" для госпитализации.

Окончательные результаты должны отображаться:

**'Hospital Readmit per Yr'**,
'0',
'1',
'0',
'1',
'0',
'0',
'0',
'0',
'1',
'1'

**'Hospital Readmit per Yr & Fac'**,
'0',
'1',
'0',
'0',
'0',
'0',
'0',
'0',
'1',
'0'

Я думал о том, чтобы использовать какой-то случай, когда с ведущей функцией, включая раздел.Просто не уверен, как это записать.Я использую SQL Server MS 2008.

1 Ответ

0 голосов
/ 18 декабря 2018

Это может быть достигнуто либо с помощью CASE WHEN, либо с помощью функций LEAD или LAG.Однако, поскольку вы упомянули, что используете SQL Server 2008, LEAD или LAG могут не работать, поскольку LEAD и LAG являются аналитическими функциями, которые можно использовать в SQL Server 2012 или более поздней версии.Возможно, вы захотите попробовать что-то подобное, если хотите использовать CASE WHEN.

Для получения значения флага [Госпитализация на год]:

SELECT 
CASE WHEN A.[RowNumber]>1 THEN 1 else 0 END As [Hospital Readmit per Yr]
FROM (select ROW_NUMBER() OVER (PARTITION BY [ID_Yr_Cat] order by [Admission Mth], [Admission Yr]) as [RowNumber], * from hospital) as A

Для получения значения флага [ID_Yr_Cat_Fac]:

SELECT 
CASE WHEN A.[RowNumber]>1 THEN 1 else 0 END As [Hospital Readmit per Yr & Fac]
FROM (select ROW_NUMBER() OVER (PARTITION BY [ID_Yr_Cat_Fac] order by [Admission Mth], [Admission Yr]) as [RowNumber], * from hospital) as A

Если вы хотите посмотреть на ALL столбцы, чтобы понять, как запрос возвращает результаты, проверьте скриншоты ниже: enter image description here

...