SQL连接返回多个结果

时间:2014-08-01 02:07:06

标签: sql tsql

select 
tmp.templatedesc Template
,sec.name Section
,q.questiontext Questions,
--,sum(case when q.responserequired = '0' then 1 else  null end)  as 'N/A'
--,sum(case when q.responserequired = '1' then 1 else  null end)  as Scored
--,count (case when (qr.weightedscore is not null and tmp.templatedesc  = 'QA 30 Day Call Form' and
--sec.name = 'opening' and
--rv.reviewstatusid = 1 )then 1 else null end) as scored
----,(case when qr.weightedscore <> q.weight then rv.reviewid else null end) as fail
--count (case when qr.weightedscore is null then 1 else null end) NA,
--count (case when qr.weightedscore is not null then 1 else null end) scored, 






 sec.sequencenumber, q.questionnumber, qr.*



from 
aqm.dbo.reviewtemplate tmp (nolock)

inner join aqm.dbo.section sec on sec.templateid =tmp.templateid 
inner join aqm.dbo.sectionresult scr on scr.sectionid = sec.sectionid
inner join aqm.dbo.questionresult qr on qr.sectionresultid = scr.sectionresultid
inner join aqm.dbo.question q on q.questionid = qr.questionid
--inner join aqm.dbo.questiontype qt on qt.questiontypeid = q.questiontypeid
--left outer join aqm.dbo.questionoption qo on qo.questionid = q.questionid
inner join aqm.dbo.review rv on tmp.templateid = rv.templateid
inner join aqm.dbo.media md on md.mediaid = rv.mediaid
inner join  aqm.dbo.iqmuser ut on md.userid = ut.userid

where 
rv.reviewstatusid = 1 and 
tmp.templatedesc  = 'QA 30 Day Call Form' 
and sec.name = 'opening' and
convert(varchar,dateadd(hh,-7,rv.reviewdate), 101) = '07/07/2014'
and ut.windowslogonaccount = 'name.name'
and q.questionnumber = 4

--group by 
--tmp.templatedesc , sec.name, q.questiontext, sec.sequencenumber, q.questionnumber

order by 
sec.sequencenumber, q.questionnumber

questionresultid和sectionresultid返回多个值

enter image description here

如何修复连接以使其不返回多个值?

我把它钻到一个日期和一个人,这样它应该只返回一行结果(但显然没有用)

不确定我能提供的其他数据

更新

我认为它与联接

有关

内部联接aqm.dbo.sectionresult scr on scr.sectionid = sec.sectionid     内部联接aqm.dbo.questionresult qr on qr.sectionresultid = scr.sectionresultid

因为那些是返回多个结果的那些。

只是不知道如何解决它

1 个答案:

答案 0 :(得分:2)

首先,在你的返回字段或where子句中都没有使用aqm.dbo.questiontype和aqm.dbo.questionoption,所以如果不需要它们就把它们除掉。

其次,你是在aqm.dbo.review上进行外部联接,但是在WHERE子句中需要reviewstatusid和reviewdate - 所以这应该是一个内部联接。

最后,调试此类问题的最佳方法是注释掉COUNT语句和GROUP BY子句 - 并查看返回的原始数据。