2014-01-17 4 views
0

나는이 쿼리에서 세 가지 테이블의 값을 계산하고 각각에서 두 개의 열, 날짜 및 개수를 구합니다. 첫 번째 12 초 동안 세 번째 레코드를 얻고 세 번째 레코드를 12 번 가져옵니다. 마지막으로 두 번째 열의 날짜가 일치하는 모든 테이블에서이 계산 열에서 계산을 조금하고 있습니다.날짜 기준으로 계산 계산

예를 들어 첫 번째 테이블 열의 날짜가 두 번째 및 세 번째 열과 일치하면 이 값과 그것의 비율을 얻는 중 ... 비록 그것에 대한 쿼리를 만들었지 만 정확한 데이터를 제공하고 있습니다 ...

나는이 테이블을 날짜를 기준으로 계산할 수있는 방법을 알아야합니다. 나는 오라클 DB

SELECT TRUNC(ans.date), 
    (a.count1+b.count2+c.count3)*100/count4 AS status 
FROM 
    (SELECT COUNT(pans.actual)count1, 
      TRUNC(ans.date) AS subdate 
    FROM pans, ans 
    WHERE pans.actres ='1' 
    AND TRUNC(anss.date) > sysdate-100 
    AND pans.id = anss.id 
    GROUP BY TRUNC(anss.date) 
)a, 
    (SELECT COUNT(conans.actres)count2, 
     TRUNC(anss.date) AS subdate 
    FROM conans, anss 
    WHERE conans.actres ='1' 
    AND TRUNC(anss.date) > sysdate-100 
    AND conans.id = anss.id 
    GROUP BY TRUNC(anss.date) 
)b, 
    (SELECT COUNT(anss.submitted)count3, 
      TRUNC(anss.date) AS subdate 
    FROM anss 
    WHERE submitted = 1 
    AND TRUNC(anss.date) > sysdate-100 
    GROUP BY TRUNC(anss.date) 
)c, 
    (SELECT COUNT(pans.actres) count4 
    FROM pans, anss 
    WHERE anss.date > sysdate-100 
)d, 
    anss, 
    pans 
WHERE a.subdate = b.subdate 
    AND b.subdate = c.subdate 
    AND a.subdate = c.subdate 
    AND TRUNC(anss.date) > sysdate-100 
GROUP BY TRUNC(anss.date),a.count1,b.count2,c.count3,d.count4 


을 사용하고 있습니다
count1 
------------------ 
count | date 
3  | 12/12/1928 
5  | 12/12/1998 
6  | 12/12/1995 


count2 
------------------ 
count| date 
3 | 12/12/1928 
5 | 12/12/1998 
6 | 12/12/1995 
23 | 12/12/1924 
56 | 12/12/1993 
68 | 12/12/1992 
39 | 12/12/1921 
58 | 12/12/1990 
63 | 12/12/1999 
count3 
------------------ 
count| date 
3 | 12/12/1928 
5 | 12/12/1998 
6 | 12/12/1995 
23 | 12/12/1924 
56 | 12/12/1993 
68 | 12/12/1992 
39 | 12/12/1921 
58 | 12/12/1990 
63 | 12/12/1999 


count4 
------------------ 
4500 


지금은

을 계산해야 17,451,515,
(count1+count2+count3)*100/count4 
when count1.date=count2date=count3.date 

HTH

답변

0

당신은 지난 100 일 모든 앤스 기록을 가지고 십자가는 팬을 가입 할 수 있습니다. 이 교차 결합이 필요합니까? 우발적 인 교차 조인을 방지하기 위해 ANSI 조인 구문을 사용하는 것이 좋습니다.

모든 a, b 및 c에있는 모든 날짜를 찾아 그에 따라 조인합니다.

십자가 조인 a-b-c 조인을 십자가 조인과 교차 가입하십시오. 다시 : 여기에 실제로 참여 하시겠습니까? anns.date로 그룹화 (날짜는 나쁜 키워드이므로 그 자체로 키워드 임) anns.date는 검색된 레코드와 어떤 관계가 있습니까 ???

문법이 올바르지 만 조인을 잘못 신뢰합니다 .-)