2011-03-01 4 views
1

세 열을 올바르게 반환하는 쿼리가 있습니다. LEFT JOIN의 결과 만 사용하여 SUM() 데이터를 삭제하는 방법을 알아낼 수 없습니다. 올바르게 다음과 같은 결과를 반환왼쪽 조인 결과에서 데이터를 선택하는 방법


 
select TITLES.NAME, 
COUNT(progskills.skill_no) as B, 
COUNT(ss.skill_no) as A, 
SUM(ss.score) as C 
FROM TITLES 
inner join progskills 
    on progskills.program_no = titles.title_no 
left join STUSKILLS ss 
    on progskills.SKILL_NO = ss.skill_no 
    and ss.STUDENT_NO = '1234' 
where progskills.program_no in (select progskills.program_no 
           from PROGSKILLS, STUSKILLS 
           where progskills.SKILL_NO = stuskills.SKILL_NO 
           and stuskills.SCORE != 0 
           and stuskills.STUDENT_NO = '1234') 
group by titles.name 

:

여기 올바른 세 개의 열을 반환 원래 쿼리입니다

내가 뭘하려고 오전
 
          B A  C 
Database Administration 4 1  50 
Implementation Specialist 4 1  50 
Office Manager   4 2 130 
Registrar     4 2 130 
Scheduler     4 3 130 
Scheduling Assistant  2 1  50 
Support Systems Manager 4 2 130 

, 네 번째 열에서 ST에 대한 왼쪽 조인의 결과를 기반으로 PROGSKILLS 테이블에서 MINSCORE라는 열을 SUM하는 것입니다 USKILLS. 즉, 왼쪽 조인에서 참조하는 요소 만 합산하려고합니다.

많은 시도를했지만 모든 구문이 실패하거나 다른 데이터 열 결과가 배가되는 것처럼 보입니다.

내 추측은 ... 내 기본 SELECT 절에

 
SUM(select ps.minscore from PROGSKILLS ps where ps.SKILL_NO = ss.skill_no) as D 

를 다음을 추가하는 것입니다 그러나 SQL은 SUM이 (SELECT 구문 오류가 있고 ss.skill_no가 바인딩 할 수 없습니다 뿌려줍니다.

나는 나는 이것이 매우 복잡한 쿼리입니다 실현

. SELECT이 허용 (즉, SUM을 알고 있지만 나는 누군가가 나 열 "A"에 계산 요소를 기반으로 PROGSKILLS에서 데이터를 가져 오는 방법을 알아내는 데 도움 수 있기를 바랍니다 .

미리 ... 고맙습니다!

답변

4

시도해 보셨습니까?

sum(case when ss.skill_no is null then 0 else progskills.MINSCORE end) as D 
+0

예, 그랬습니다. 이봐, 난 stackoverflow (그리고 모든 기여자) –

관련 문제