複数のテーブルからケースを含む特定のレコードを選択する必要があり、作成するいくつかのケースに基づいてそれらを選択する必要があります。
これは私が私のクエリのためにこれまでに持っているものです:
select distinct top 10
QuestionTag =( CASE
WHEN qt.id = 98 THEN 'Save the Sale TP'
WHEN qt.id = 99 THEN 'Close the Loop'
WHEN qt.id != 98 AND qt.id != 99 THEN ''
WHEN qt.id = 98 AND qt.id = 99 THEN 'Save the Sale TP'
END),
c.contactid as contactid, c.first, c.last,
st.datecomplete, st.ownerIdfk, st.finalScore, st.surveyid,
cc.clientcontactid, cc.leadsource,
se.eventdate, se.ProcedureName, se.LocationName, se.salesperson, se.SpecialistName, st.surveyname
from sigweb.dbo.survey_tracking st
join sigweb.dbo.survey_types_main stm on st.surveyid = stm.surveyidfk
join sigweb.dbo.contact c on st.contactid = c.contactid
join survey.dbo.client_contacts cc on c.contactid = cc.contactidfk
join survey.dbo.survey_events se on c.contactid = se.contactidfk
join survey.dbo.results r on r.owneridfk = st.owneridfk
left join survey.dbo.questionsAdmin qa on qa.questionidfk = r.questionidfk
join survey.dbo.QuestionTags qt on qt.id=qa.tagidfk
これは出力の一部です:
QuestionTag ContactID First Last
----------- --------- ----- ----
2012082911569010000001 John Reardon
Close the Loop 2012082911569010000001 John Reardon
Save the Sale TP 2012082911569010000001 John Reardon
2012082911569010000003 Beverly Conley
Close the Loop 2012082911569010000003 Beverly Conley
Save the Sale TP 2012082911569010000003 Beverly Conley
2012082911569010000009 Larry Grigsby
2012082911569010000011 Brenda Bain
2012082911569010000012 Richard Pecora
2012082911569010000018 Karl Oliszczak
これらのケースに基づいて重複レコードの1つだけを選択するには、「where」を追加する必要があります。
連絡先IDにCTLしかない場合は、連絡先
IDにSTS TPしかない場合は選択し
、連絡先が複数回出現し、''があり、CTLとSTS TPがある場合
は、連絡先にCLがない場合はSTS TPのみを出力するか、 STS TPは、連絡先をまったく出力しません。
WHERE句内にもう1つのケースを追加する必要があると考えていましたが、時間とコードの記述を節約できる別の方法があるかどうか疑問に思いました。