为什么此sql查询不能准确传递结果?
我希望为什么此sql查询不能准确传递结果?,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我希望sum(t1+t2)作为d结果使用groupbytblpersonalinfo.applicationId准确发布,但此查询使用groupbytblpersonalInfo.applicationId显示d的结果,但此查询以增量方式显示d的结果 SELECT DISTINCT t1+t2, tblPersonalInfo.ApplicantId, tblPersonalInfo.Applicantname FROM ( SELECT SUM(
sum(t1+t2)作为d
结果使用groupbytblpersonalinfo.applicationId
准确发布,但此查询使用groupbytblpersonalInfo.applicationId
显示d的结果,但此查询以增量方式显示d的结果
SELECT DISTINCT
t1+t2,
tblPersonalInfo.ApplicantId,
tblPersonalInfo.Applicantname
FROM (
SELECT SUM(tblExpeRange.score)as t2
FROM tblexperience
LEFT OUTER JOIN tblExpeRange
ON tblexperience.ExpRange=tblExpeRange.expeRange
GROUP BY tblexperience.ApplicantId
) tblexperience,
(
SELECT SUM(tblGradPoint.score) AS t1
FROM tblAcademicInfo
LEFT OUTER JOIN tblGradPoint
ON tblAcademicInfo.cgpa=tblGradPoint.[cgpa/division]
GROUP BY tblAcademicInfo.ApplicantId
) tblAcademicInfo,
tblPersonalInfo
INNER JOIN tblCircular
ON tblPersonalInfo.Cirname = tblCircular.Cirname
WHERE tblCircular.Cirname=(tblPersonalInfo.Cirname)
RETURN
不是100%确定所有查询,但听起来可能需要将两个子查询合并为一个子查询,然后可以在
SELECT
子句中求和
SELECT sum(T) AS d,
Y.ApplicantId,
Y.Applicantname
FROM (
SELECT tblexperience.ApplicantId,
SUM(tblExpeRange.score)as T
FROM tblexperience
LEFT OUTER JOIN tblExpeRange
ON tblexperience.ExpRange=tblExpeRange.expeRange
GROUP BY tblexperience.ApplicantId
UNION
SELECT tblAcademicInfo.ApplicantId,
SUM(tblGradPoint.score) AS T
FROM tblAcademicInfo
LEFT OUTER JOIN tblGradPoint
ON tblAcademicInfo.cgpa=tblGradPoint.[cgpa/division]
GROUP BY tblAcademicInfo.ApplicantId
) X
INNER JOIN tblPersonalInfo Y
ON X.ApplicantId = Y.ApplicantId
INNER JOIN tblCircular Z
ON Y.Cirname = Z.Cirname --(*)
--WHERE Z.Cirname=(Y.Cirname) --.....maybe not required as the line above (*) deals with this
GROUP BY Y.ApplicantId,
Y.Applicantname
子查询
tblAcademicInfo
和tblexperience
之间没有任何连接,因此您正在创建一个交叉联接
,其中第一个值与第二个值相加。也许您应该尝试将applicationId
添加到每个子查询选择列表中,并使用它在它们之间以及使用tblPersonalInfo
SELECT DISTINCT
t1+t2,
tblPersonalInfo.ApplicantId,
tblPersonalInfo.Applicantname
FROM
(
SELECT
tblexperience.ApplicantId
,SUM(tblExpeRange.score)as t2
FROM tblexperience
LEFT OUTER JOIN tblExpeRange
ON tblexperience.ExpRange=tblExpeRange.expeRange
GROUP BY tblexperience.ApplicantId
) tblexperience,
INNER JOIN
(
SELECT
tblAcademicInfo.ApplicantId
,SUM(tblGradPoint.score) AS t1
FROM tblAcademicInfo
LEFT OUTER JOIN tblGradPoint
ON tblAcademicInfo.cgpa=tblGradPoint.[cgpa/division]
GROUP BY tblAcademicInfo.ApplicantId
) tblAcademicInfo ON tblAcademicInfo.ApplicantId = tblexperience.ApplicantId
INNER JOIN tblPersonalInfo ON tblexperience.ApplicantId = tblPersonalInfo.ApplicantId
INNER JOIN tblCircular
ON tblPersonalInfo.Cirname = tblCircular.Cirname
编辑:另外,如果使用公共表表达式和别名,您不认为此查询看起来更可读吗:
WITH CTE_Experience AS
(
SELECT
e.ApplicantId
,SUM(er.score) AS t2
FROM tblexperience e
LEFT JOIN tblExpeRange er ON e.ExpRange = er.expeRange
GROUP BY e.ApplicantId
)
,CTE_AcademicInfo AS
(
SELECT
ai.ApplicantId
,SUM(gp.score) AS t1
FROM tblAcademicInfo ai
LEFT JOIN tblGradPoint gp ON ai.cgpa = gp.[cgpa/division]
GROUP BY ai.ApplicantId
)
SELECT
ai.t1 + ex.t2,
pin.ApplicantId,
pin.Applicantname
FROM tblPersonalInfo pin
INNER JOIN CTE_Experience ex ON ex.ApplicantId = pin.ApplicantId
INNER JOIN CTE_AcademicInfo ai ON ai.ApplicantID = pin.ApplicantId
INNER JOIN tblCircular ci ON ci.Cirname = pin.Cirname
试试这个:
SELECT
tblPersonalInfo.ApplicantId,
tblPersonalInfo.ApplicantName,
(tblExperience.t2+tblAcademicInfo.t1) as d
FROM tblPersonalInfo
INNER JOIN (
SELECT SUM(tblExpeRange.score) as t2,
tblExperience.ApplicantId
FROM tblExperience
LEFT OUTER JOIN tblExpeRange
ON tblExperience.ExpRange=tblExpeRange.ExpRange
GROUP BY tblExperience.ApplicantId
)tblExperience ON tblPersonalInfo.ApplicantId=tblExperience.ApplicantId
INNER JOIN (
SELECT SUM(tblGradPoint.score) as t1,
tblAcademicInfo.ApplicantId
FROM tblAcademicInfo
LEFT OUTER JOIN tblGradPoint
ON tblAcademicInfo.cgpa=tblGradPoint.[cgpa/division]
GROUP BY tblAcademicInfo.ApplicantId
)tblAcademicInfo ON tblPersonalInfo.ApplicantId=tblAcademicInfo.ApplicantId
INNER JOIN tblCircular
ON tblPersonalInfo.Cirname=tblCircular.Cirname
为什么要注释掉sum和group by?显示您遇到问题的实际查询,而不是注释掉大块的修改版本。无论如何,我怀疑问题出在
DISTINCT
上。如果您正在分组,则不需要这样做……我试图编辑查询以使其更具可读性,但注释掉的部分会造成真正的混乱tblexperience与其他表之间的关系是什么?从重写查询开始,将子查询粘贴到临时表中,然后首先检查它们的结果。最后处理查询本身。感谢replay..但是我想对两个查询求和,比如sum(T+T)T是另一个值的和&另一个T是另一个值