返回多个时返回一行

时间:2017-06-22 09:41:43

标签: sql-server duplicates

首先对此发表道歉,因为已经发布了一些类似的帖子,但我似乎无法回复我想要的内容

我的数据返回

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 |  

代码如下

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 

任何帮助都会很棒。

2 个答案:

答案 0 :(得分:0)

join中的一个(或多个)导致此重复,因为您的join条件不够具体。

正如其他评论者所说,删除所有join然后逐个添加它们,直到您开始看到重复项。使用select *,您可以查看正在撤回的其他数据,以及您需要在join中包含哪些其他过滤器。一旦没有重复,请添加下一个join并重复整个过程。

这是解决此问题的明智方法,因为您可以使用更具体的join条件停止此重复,这也可以确保您的查询处理的数据更少,因此会更有效率。

答案 1 :(得分:0)

虽然优雅的解决方案是修复您的联接,以便它们不会产生尽可能多的行,但非常快速的解决方法是使用 distinct 来消除重复并转换文本字段到一个字符串,所以可以进行比较。

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