为什么此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
准确发布,但此查询使用groupby
tblpersonalInfo.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是另一个值