2013-07-24 88 views
0

我想要sum(t1+t2) as d结果与group by tblpersonalInfo.applicantID准确发布,但此查询显示我与tblpersonalInfo.applicantID组的结果,但此查询显示结果递增。为什么这个sql查询不能准确传递结果?

​​
+1

为什么你必须注释掉的总和和组吗? – Barmar

+0

在我试用之前 –

+0

显示您遇到的实际查询问题,而不是大块注释掉的修改版本。无论如何,我怀疑问题是用'DISTINCT'。如果你正在分组,你不需要这个。 – Barmar

回答

0

不是100%肯定你所有的查询,但听起来像是你可能需要UNION两个子查询到一个,那么你可以在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 
+0

感谢重播..但我想总结两个疑问像sum(T + T)T是总和另一个值和另一个T是其他值 –

+0

非常感谢你4ur帮助它真的工作..... –

+0

没问题 - 很高兴我能帮上忙;现在工作好吗? – whytheq

0

你在子查询tblAcademicInfotblexperience之间没有任何关联,因此您要创建一个CROSS JOIN,其中第一个值与第二个值中的每个值相加。也许你应该尝试加入ApplicantId每个子查询选择列表,并用它在它们之间以及与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 
0

试试这个:

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 
相关问题