2014-04-01 4 views
0

여러 테이블에 합류 내가 3 MySQL의 테이블과 같이 유무 : 해당 테이블을 기반으로조건문

enter image description here enter image description here

내가 조건문있는 테이블을 만들고 싶어 : 경우 표 3에서 skor> = nilai 다음 saran = 시장 및 미성년자는 table2에서, 그 다음 saran = butuh는 테이블 1에서 값이 0보다 크고 bidang에 의해 연결됩니다. 그리고 nilai을 위해 =

selct((max(skor)-min(skor))*0.25)+min(skor) from table 3 

그래서,이 같은 결과는 :

enter image description here

어떻게 만들려면?

+0

어떤 언어입니까? – Rahul

+0

언어는 mysql – user3440030

+0

아니요, 나는 bidang, kurang, butuh를 의미합니까? 결코이 용어의 열심히. – Rahul

답변

0

아래의 쿼리를보십시오 :

select 
NIP, 
Bidang, 
case when Skor >= ((max(skor)-min(skor))*0.25)+min(skor) 
then concat(mayor,',',minor) 
else concat(Butuh,',',Bidang) 
end as Saran 
from 
(
select table2.*, 
table1.Butuh, 
table1.Kurang, 
table3.Skor 
from table2 join table1 
on table2.Bidang = table1.Bidang 
left join table3 
on table2.NIP = table3.NIP 
where table1.Butuh > 0 
) tab 
+0

이 구문을 시도했지만 결과는 항상 null입니다. – user3440030

0

nilai 그냥 글로벌 점수 임계 값을 의미 가정을, 당신은 기본적으로 ...

  • 당신의 nilai 값을 집계 쿼리를 작성해야합니다
  • 서로 다른 레코드의 데이터를 단일 문자열
  • 조인 테이블 및 집계 쿼리
  • 원하는 데이터를 선택하고 함수를 적용하여 필요에 따라 적절한 출력을 만듭니다.

    select t2.Nip 
        , t3.bidang 
        , case when t3.skor >= t3disc.nilai then t2.mayor || ', ' || t2.minor else base_1.butuh_agg end 
            saran 
        from table_2 t2 
        join table_3 t3 on (t3.Nip = t2.Nip and t3.bidang = t2.bidang) 
        join (
           select t11.bidang 
            , t11.butuh 
             || CASE WHEN t12.butuh IS NOT NULL THEN ', ' || t12.butuh ELSE '' END 
             || CASE WHEN t13.butuh IS NOT NULL THEN ', ' || t13.butuh ELSE '' END 
             || CASE WHEN t14.butuh IS NOT NULL THEN ', ' || t14.butuh ELSE '' END 
             || CASE WHEN t15.butuh IS NOT NULL THEN ', ' || t15.butuh ELSE '' END 
              butuh_agg 
            from (
              select t1.bidang 
               , min(t1.kurang) kmin 
               from table_1 t1 
              group by t1.bidang 
             ) t11 
          left join table_1 t12 on (t12.bidang = t11.bidang AND t12.kurang = t11.kmin + 1) 
          left join table_1 t13 on (t13.bidang = t11.bidang AND t13.kurang = t11.kmin + 2) 
          left join table_1 t14 on (t14.bidang = t11.bidang AND t14.kurang = t11.kmin + 3) 
          left join table_1 t15 on (t15.bidang = t11.bidang AND t15.kurang = t11.kmin + 4) 
         ) base_1 on (base_1.bidang = t2.bidang) 
        join (
           select t31.bidang 
            , t3agg.nilai 
           from table_3 t31 
          cross join (
             select (max(t32.skor) - min(t32.skor)) * 0.25) + min(t32.skor) nilai 
              from table_3 t32 
            ) t3agg 
         ) t3disc on (t3disc.bidang = t2.bidang) 
         ; 
    

    이 제안 당신은이 가운데 중복이 없는지, 4 이외의 값이 0 표 1에 주어진 bidang에 대한 최대에 있다고 가정합니다 :

당신의 결과는 다음과 같은 라인을 따라 뭔가 될 것입니다 값이 4보다 작거나 같아야합니다. 그렇지 않으면 쿼리의 순위 지정 기능을 사용해야합니다.

+0

나는 그 코드로 시도하지만 그 코드 – user3440030

+0

구문 오류가 수정 된 많은 오류가 있습니다. 이 코드는 시작해야한다 - 나는 mysql 구문에 약간 녹슬다. 절대적으로 도움이되지 않는다고 생각하면 메모를 남겨주세요. 답변을 삭제하겠습니다. – collapsar