Sql 为个人带来不同的价值观
我正在尝试读取所有患者的数据,这些患者在其最近的proc_chron日期的4个轴类别中的任何一个,并且患者在其病例状态下是a(活动)患者,不包括所有四个类别均为空的患者。SQLServer2005Sql 为个人带来不同的价值观,sql,sql-server-2005,group-by,distinct,Sql,Sql Server 2005,Group By,Distinct,我正在尝试读取所有患者的数据,这些患者在其最近的proc_chron日期的4个轴类别中的任何一个,并且患者在其病例状态下是a(活动)患者,不包括所有四个类别均为空的患者。SQLServer2005 select pct.patient_id, pct.clinic_id, pct.axis_I_II_1, pct.axis_I_II_2, pct.axis_I_II_3, pct.axis_III_1, pct.proc_chron from patient_clin_tran pct j
select
pct.patient_id,
pct.clinic_id,
pct.axis_I_II_1,
pct.axis_I_II_2,
pct.axis_I_II_3,
pct.axis_III_1,
pct.proc_chron
from patient_clin_tran pct
join patient p
on p.patient_id = pct.patient_id
group by pct.patient_id, pct.clinic_id, pct.axis_I_II_1,pct.axis_I_II_2, pct.axis_I_II_3, pct.axis_III_1, p.case_status, pct.proc_chron
having p.case_status = 'a' and pct.proc_chron = (select max(pct.proc_chron))
order by pct.patient_id
Move
pct.proc\u chron=(选择最大值(pct.proc\u chron)
到WHERE并重试。我不确定我是否理解你所说的。我在have之外添加了一个WHERE,并与小组成员一起尝试,并已发表评论,但仍然不起作用。StevieG已经发布了我要求你做的事情,看看是否有效。我在他发布的内容上有一个错误。我在他的下面发布了错误。Msg 156,Level 15,State 1,第15行关键字“where”附近的语法不正确。这很有效。谢谢!关于如何删除所有4个轴列都为空的轴列的语法有什么想法吗?@StevieG如果没有使用聚合函数,分组有什么意义。我想这可以在没有分组的情况下完成。这可以通过分组来完成。他只是在修改我的代码,我有个p在我发布我目前拥有的表格之前,我用了一百万种不同的形式发布它。如果有人有任何想法的话,我不确定所有4轴列都是空的。非常感谢你的帮助。编辑answeer-稍微删除GROUP BY并过滤掉带有4个空的行。。
select
pct.patient_id,
pct.clinic_id,
pct.axis_I_II_1,
pct.axis_I_II_2,
pct.axis_I_II_3,
pct.axis_III_1,
pct.proc_chron
from patient_clin_tran pct
join patient p
on p.patient_id = pct.patient_id
where p.case_status = 'a'
and pct.proc_chron = (select max(proc_chron) from patient_clin_tran pct2 where pct2.patientid = p.patientid)
and (pct.axis_I_II_1 is not null or pct.axis_I_II_2 is not null or pct.axis_I_II_3 is not null or pct.axis_I_II_4 is not null)
order by pct.patient_id