2014-04-01 98 views
0

我有3個MySQL表是這樣的:連接多個表,條件語句

enter image description here enter image description here

基於該表我想打一個表,條件語句: 如果從表3郭爾> =然後nilai saran =表2中的市長和未成年人,否則saran =表1中值大於0的butuh和bidang的concat。而對於汝=

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

我一直在嘗試這種語法,但結果始終爲空。 – 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) 
     ; 

此建議假定你有最大的在表1中的任何給定的bidang 4非零值,有其中不存在重複值,並且這些值小於或等於4.否則,您將不得不求助於查詢中的排名函數。

+0

我試着用那個代碼,但是我的代碼 – user3440030

+0

糾正了很多錯誤。這段代碼應該讓你開始 - 我在mysql語法上有點生疏。如果您認爲這絕對沒有幫助,請放下筆記,我會刪除答案。 – collapsar