2017-06-22 5 views
0

Erstens Entschuldigung für diese als eine Anzahl von ähnlichen Beiträge geschrieben wurden zurückgegeben werden, aber ich kann scheinen nur nicht zurück, was icheine Zeile zurückgeben, wenn Multiples

mag

Meine Daten zurückgibt

desc | date | taken | result | text | notes | page | group | q | answer | value | state | time | 
------------------------------------------------------------------------------ 

Asess1 | 20170101 | John | 5 | Injury | xxx | Page1 | Assess11 | 1 | 1234567 | 1 | 1 | 0 | 
Asess1 | 20170101 | John | 5 | Injury | xxx | Page1 | Assess11 | 1 | 1234567 | 1 | 1 | 0 | 
Asess1 | 20170101 | John | 5 | Injury | xxx | Page1 | Assess11 | 1 | 1234567 | 1 | 1 | 0 | 
Asess1 | 20170101 | John | 5 | Injury | xxx | Page1 | Assess11 | 1 | 1234567 | 1 | 1 | 0 | 
Asess1 | 20170101 | John | 5 | Injury | xxx | Page1 | Assess11 | 1 | 1234567 | 1 | 1 | 0 | 

Code wie folgt

select t.desc,a.date,a.taken,a.result,a.text,a.notes,d.page,d.group,d.q,d.answer,d.value,d.state,d.timeSpanSeconds 
from cc_clientAssessments a 
inner join cs_assessmentData d on a.assessmentId=d.assessment 
inner join cs_clients c on c.person=a.residentId 
inner join cs_facilities f on f.guid=a.facilityId 
inner join cs_assessmentTypes t on t.assessmentTypeId=a.assessmentTypeId 

where c.surname='smith' 
and f.name='home' 
and t.description ='injury' 
and a.dateTaken='2017-05-28 00:00:00.000' 
and d.questionName='1' 
and d.answer='1234567' 
order by t.desc, a.date desc,d.page,d.group,d.q 

jede Hilfe wäre toll.

+0

Da alle gleich sind, können Sie die 'DISTINCT'-Klausel verwenden. –

+0

[DISTINCT] (https: // technet.microsoft.com/en-us/library/ms187831 (v = sql.105) .aspx) könnte sein, was Sie suchen - Sie sollten das gewünschte Ergebnis enthalten. – Filburt

+2

Ich denke, Sie müssen die Joins auskommentieren und sie dann einzeln hinzufügen, bis Sie herausfinden, welche Tabelle mehr als 1 entsprechende Zeile hat. Ein distinct würde es für den Moment lösen, aber das ist vielleicht nicht die beste Lösung, wenn Sie nicht wissen, was das Problem ist. –

Antwort

0

Einer (oder mehrere) Ihrer join s verursacht diese Duplizierung, weil Sie in Ihren join Kriterien nicht spezifisch genug waren.

Wie andere Kommentatoren gesagt haben, entfernen Sie alle Ihre join s und fügen Sie sie dann nacheinander zurück, bis Sie beginnen, Duplikate zu sehen. Mit select * können Sie sehen, welche zusätzlichen Daten zurückgenommen werden und welche zusätzlichen Filter Sie in diese join einfügen müssen. Sobald Sie keine Duplizierung mehr haben, fügen Sie die nächste join hinzu und wiederholen Sie den gesamten Vorgang.

Dies ist sinnvoll dies als neunmal lösen von zehn Sie können mit spezifischeren join Kriterien diese Vervielfältigung stoppen, die auch dafür sorgen, wird Ihre Abfrage weniger Daten verarbeitet und wird daher effizienter sein.

0

Obwohl die elegante Lösung ist, Ihre Joins zu beheben, so dass sie nicht in so vielen Zeilen führen, wäre eine sehr schnelle Lösung, distinct zu verwenden, um Duplikate zu beseitigen und Ihr Textfeld in eine Zeichenfolge zu konvertieren, so dass es kann verglichen werden.

select distinct t.desc,a.date,a.taken,a.result,substring(a.text,1,512) as text,a.notes,d.page,d.group,d.q,d.answer,d.value,d.state,d.timeSpanSeconds 
from cc_clientAssessments a 
inner join cs_assessmentData d on a.assessmentId=d.assessment 
inner join cs_clients c on c.person=a.residentId 
inner join cs_facilities f on f.guid=a.facilityId 
inner join cs_assessmentTypes t on t.assessmentTypeId=a.assessmentTypeId 

where c.surname='smith' 
and f.name='home' 
and t.description ='injury' 
and a.dateTaken='2017-05-28 00:00:00.000' 
and d.questionName='1' 
and d.answer='1234567' 
order by t.desc, a.date desc,d.page,d.group,d.q 
+0

Diese Antwort löst das Symptom, aber nicht das Problem. Es ist eine faule Codierung, die zu ineffizienten Abfragen und zukünftigen Problemen führt. – iamdave

Verwandte Themen