2013-07-24 3 views
0

결과가 group by tblpersonalInfo.applicantID으로 정확하게 게시되기를 원하지만이 쿼리는 그룹과 함께 결과를 tblpersonalInfo.applicantID으로 표시하지만이 쿼리는 점진적으로 결과를 보여줍니다. 당신은 당신이 SELECT 절에 요약 수 있으며, 두 개의 하위 쿼리 하나에 UNION해야 할 수도 있습니다처럼 모든 쿼리에 대해 확실이 SQL 쿼리가 결과를 정확하게 전달하지 않는 이유는 무엇입니까?

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 
+1

당신이 주석에 의해 합 그룹이 이유는 무엇입니까? – Barmar

+0

시도해보기 전에 –

+0

큰 덩어리가있는 수정 된 버전이 주석 처리되지 않은 실제 쿼리를 표시하십시오. 어쨌든 문제는 DISTINCT로 의심됩니다. 그룹화하는 경우에는 필요하지 않습니다. – Barmar

답변

0

100 %하지만 ... 소리

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

리플레이 덕분에 ..하지만 합계 (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 
관련 문제