我有以下查询一个问题:CTE-公共表EXP
WITH CTE_1 (stu_id
,meet_doc_id
,doc_name
,stu_name
,dob
,done
,date_meet_doc)
AS
(SELECT stu_id
,meet_doc_id
,doc_name
,stu_name
,dob
,CASE
WHEN (PATINDEX('%SMOKING%',act.VALUE)) THEN
'LMDO'
WHEN (PATINDEX('%NOT SMOKING%',act.VALUE)) THEN
'LMD1'
WHEN (ISNULL(CAST(act.VALUE as varchar(max)),'')='') THEN
'CLEAR'
ELSE
'CLEAR'
END done
,date_meet_doc
FROM
abc INNER JOIN
INNER JOIN
INNER JOIN
WHERE multiple conditions
)
SELECT * FROM CTE_1 one
WHERE date =(SELECT MAX(DATE) FROM CTE_1 two WHERE two.stu_id=one.stu_id
AND one.doc_name=two.doc_name)
ORDER BY stu_name,dob
;
三个学生(用于如)的结果集内的查询(CTE_1)的将是这样
stu_id meet_doc_id doc_name stu_name dob value date
101 0104 AD AM 15/06/1950 LMDO 2011-02-15
101 0105 AD AM 15/06/1950 CLEAR 2011-02-18
101 0106 AD AM 15/06/1950 CLEAR 2011-02-25
102 0107 AD AK 12/08/1987 CLEAR 2011-03-28
102 0108 AD AK 12/08/1987 LDMO 2011-04-29
103 0109 PK LMP 13/07/1970 CLEAR 2011-03-28
103 0110 PK LMP 13/07/1970 CLEAR 2011-05-12
,当我执行整个查询我的结果集将
stu_id meet_doc_id doc_name stu_name dob value date
101 0106 AD AM 15/06/1950 CLEAR 2011-02-25
102 0108 AD AK 12/19/1987 LDMO 2011-04-29
103 0110 PK LMP 13/07/1970 CLEAR 2011-05-12
我有什么做的改变外部查询以仅选择那些值,即针对特定学生的LDMO或LMD1并且其医生是否相同?
假设学生多次遇到文档,并且在任何情况下如果学生获得LMDO或LMD1,则应该只选择该记录,而不考虑日期。
我期待我的结果集是这样的:
stu_id meet_doc_id doc_name stu_name dob value date
101 0104 AD AM 15/06/1950 LMDO 2011-02-15
102 0107 AD AK 12/08/1987 CLEAR 2011-03-28
103 0110 PK LMP 13/07/1970 CLEAR 2011-05-12
其背后的逻辑是,如果stu_id是相同的,并且DOC_NAME是相同的,如果存在,值为LMDO或LMD1则显示,记录如果没有显示有CLEAR的记录。 简单地说,我想删除MAX(日期),并为具有相同doc_name的特定stu_id的整个报告周期设置一个条件。
非常感谢,德里克atlest你没有放弃,因为试图进入我的senario。下面是为我制定的答案。再次感谢 :) – palum