具有多个条件的Teradata SQL CASE语句
我有以下SQL查询-具有多个条件的Teradata SQL CASE语句,sql,case,teradata,Sql,Case,Teradata,我有以下SQL查询- select distinct HospitalAcctID, AdmitDate, DischargeDate, PatMRN, Pat_id, ICD, MedCenter, (case when SeqCount =1 and AdmitDate > '06/01/2013' and AdmitDate < '06/01/2018' the
select distinct HospitalAcctID,
AdmitDate,
DischargeDate,
PatMRN,
Pat_id,
ICD,
MedCenter,
(case when SeqCount =1 and AdmitDate > '06/01/2013' and AdmitDate < '06/01/2018' then 1 else null end ) Firstdiag
from
(
select distinct acct.HSP_ACCOUNT_ID as HospitalAcctID,
cast(acct.ADM_DATE_TIME as date format 'mm/dd/yyyy') as AdmitDate,
cast(acct.DISCH_DATE_TIME as date format 'mm/dd/yyyy') as DischargeDate,
pat.pat_mrn_id as PatMRN,
pat.pat_id as Pat_id,
REF_BILL_CODE as ICD,
grp7.NAME AS MedCenter,
row_number() over (partition by PatMRN order by AdmitDate) as SeqCount
from acct
inner join pat on pat.pat_id = acct.pat_id
inner join hspenc on hspenc.CSN_ID = acct.CSN_ID
inner join dx on acct.ACCOUNT_ID = dx.ACCOUNT_ID and line = 1
inner join edg on dx.DX_ID = edg.DX_ID
inner join loc on loc.LOC_ID = acct.LOC_ID
inner join grp7 ON loc.RPT_GRP_SEVEN = grp7.RPT_GRP_SEVEN
where
grp7.NAME = 'SMC AREA'
and ADMIT_CONF_STAT_C in ('1','4')
and (edg. REF_BILL_CODE in ('431',
'431')
)
and ADT_PAT_CLASS_C in ('1204','12113')
order by AdmitDate;
)Admit
但我得到以下语法错误-
语法错误,在'AdmitDate'和','之间应为'EXCEPT'关键字、'UNION'关键字或'MINUS'关键字
在外部select语句中,我试图获取第一次诊断的最小日期。我还想只获取2013年6月至2018年6月期间被诊断的患者,这就是我有病例陈述的原因。但是案例陈述给了我错误 正如@BarbarosÖzhan已经写的那样,通过AdmitDate删除最后一行命令;在派生表中 但不需要第_行编号:
select distinct acct.HSP_ACCOUNT_ID as HospitalAcctID,
cast(acct.ADM_DATE_TIME as date format 'mm/dd/yyyy') as AdmitDate,
cast(acct.DISCH_DATE_TIME as date format 'mm/dd/yyyy') as DischargeDate,
pat.pat_mrn_id as PatMRN,
pat.pat_id as Pat_id,
REF_BILL_CODE as ICD,
grp7.NAME AS MedCenter,
case when -- current rows is first row
min(AdmitDate)
over (partition by PatMRN) = AdminDate
-- current row within date range
and AdminDate >= DATE '2013-06-01' and AdmitDate < DATE '2018-06-01'
then 1
else null
end as Firstdiag
from acct
inner join pat on pat.pat_id = acct.pat_id
inner join hspenc on hspenc.CSN_ID = acct.CSN_ID
inner join dx on acct.ACCOUNT_ID = dx.ACCOUNT_ID and line = 1
inner join edg on dx.DX_ID = edg.DX_ID
inner join loc on loc.LOC_ID = acct.LOC_ID
inner join grp7 ON loc.RPT_GRP_SEVEN = grp7.RPT_GRP_SEVEN
where
grp7.NAME = 'SMC AREA'
and ADMIT_CONF_STAT_C in ('1','4')
and (edg. REF_BILL_CODE in ('431',
'431')
)
and ADT_PAT_CLASS_C in ('1204','12113')
order by AdmitDate;
我还切换到标准SQL日期文字日期“2013-06-01”,而不是“06/01/2013”。前一个日期“YYYY-MM-DD”只有一种可能的格式,而后一种格式取决于基列的格式,当它发生变化时可能会失败,当然不是在查询中,因为您在CAST中定义了它。正如@BarbarosÖzhan已经写的那样,通过AdmitDate删除最后一行顺序;在派生表中 但不需要第_行编号:
select distinct acct.HSP_ACCOUNT_ID as HospitalAcctID,
cast(acct.ADM_DATE_TIME as date format 'mm/dd/yyyy') as AdmitDate,
cast(acct.DISCH_DATE_TIME as date format 'mm/dd/yyyy') as DischargeDate,
pat.pat_mrn_id as PatMRN,
pat.pat_id as Pat_id,
REF_BILL_CODE as ICD,
grp7.NAME AS MedCenter,
case when -- current rows is first row
min(AdmitDate)
over (partition by PatMRN) = AdminDate
-- current row within date range
and AdminDate >= DATE '2013-06-01' and AdmitDate < DATE '2018-06-01'
then 1
else null
end as Firstdiag
from acct
inner join pat on pat.pat_id = acct.pat_id
inner join hspenc on hspenc.CSN_ID = acct.CSN_ID
inner join dx on acct.ACCOUNT_ID = dx.ACCOUNT_ID and line = 1
inner join edg on dx.DX_ID = edg.DX_ID
inner join loc on loc.LOC_ID = acct.LOC_ID
inner join grp7 ON loc.RPT_GRP_SEVEN = grp7.RPT_GRP_SEVEN
where
grp7.NAME = 'SMC AREA'
and ADMIT_CONF_STAT_C in ('1','4')
and (edg. REF_BILL_CODE in ('431',
'431')
)
and ADT_PAT_CLASS_C in ('1204','12113')
order by AdmitDate;
我还切换到标准SQL日期文字日期“2013-06-01”,而不是“06/01/2013”。前一个日期“YYYY-MM-DD”只有一种可能的格式,而后一种格式取决于基列的格式,当它发生更改时可能会失败,当然不是在查询中,因为您在CAST中定义了它。只需在order by AdmitDate之后删除分号即可。我不知道Teradata的sql,但您甚至可能需要使用order by完全删除该行……只需删除order by AdmitDate后面的分号即可。我不知道Teradata的sql,但您甚至可能需要通过order by完全删除该行……非常感谢@dnoeth。修改后的代码非常有效。非常感谢@dnoeth。修改后的代码工作得很好。