2017-09-24 161 views
0

我有這樣的查詢(我有兩個查詢與joinunion複雜的查詢)合併兩個結果查詢到一個

SELECT 
      id, 
      COUNT(id) ct_id, 
      SUM(kl) sum_kl, 
      SUM(CASE WHEN tgl_kondisi="2017-09-13" THEN 1 ELSE 0 END) as tot, 
      SUM(CASE WHEN tgl_kondisi <= "2017-09-14" THEN kl ELSE 0 end) as sum_kl2 
     FROM (
      SELECT 
       id_kondisi as id, 
       tgl_kondisi, 
       nilai_potensi_kerugian AS kl 
      FROM laporan_kondisi 
      UNION 
      SELECT 
       id_sub_kondisi, 
       tgl_kondisi, 
       nilai_potensi_kerugian 
      FROM laporan_kondisi 
     ) merged_table GROUP BY id ORDER BY id; 

結果

+------+-------+----------+------+----------+ 
| id | ct_id | sum_kl | tot | sum_kl2 | 
+------+-------+----------+------+----------+ 
| 01 |  3 | 20000000 | 3 | 20000000 | 
| 0101 |  2 | 9000000 | 2 | 9000000 | 
| 0102 |  2 | 11000000 | 2 | 11000000 | 
| 02 |  1 |  0 | 0 |  0 | 
| 0201 |  1 |  0 | 0 |  0 | 
| 0202 |  1 |  0 | 0 |  0 | 
| 0203 |  1 |  0 | 0 |  0 | 
| 03 |  2 | 4000000 | 2 | 4000000 | 
| 0301 |  1 |  0 | 1 |  0 | 
| 0302 |  2 | 4000000 | 2 | 4000000 | 
| 0303 |  1 |  0 | 1 |  0 | 
+------+-------+----------+------+----------+ 

而另一個查詢

SELECT 
     id, 
     SUM(CASE WHEN tgl_tindak_lanjut="2017-09-14" THEN 1 ELSE 0 end) as count_all_09, 
     SUM(CASE WHEN tgl_tindak_lanjut="2017-09-13" THEN 1 ELSE 0 END) as count_09_13 
    FROM ( 
     SELECT 
      a.id_kondisi as id, 
      d.tgl_tindak_lanjut as tgl_tindak_lanjut 
     FROM 
      laporan_kondisi a 
     LEFT OUTER JOIN 
      laporan_sebab b 
     ON 
      a.id = b.id_laporan_kondisi 
     LEFT OUTER JOIN 
      laporan_rekomendasi c 
     ON 
      b.id = c.id_laporan_sebab 
     LEFT OUTER JOIN 
      laporan_tindak_lanjut d 
     ON 
      c.id = d.id_laporan_rekomendasi 
     UNION 
     SELECT 
      a2.id_sub_kondisi, 
      d2.tgl_tindak_lanjut as tgl_tindak_lanjut 
     FROM 
      laporan_kondisi a2 
     LEFT OUTER JOIN 
      laporan_sebab b2 
     ON 
      a2.id = b2.id_laporan_kondisi 
     LEFT OUTER JOIN 
      laporan_rekomendasi c2 
     ON 
      b2.id = c2.id_laporan_sebab 
     LEFT OUTER join 
      laporan_tindak_lanjut d2 
     ON 
      c2.id = d2.id_laporan_rekomendasi 
    ) merged_table GROUP BY id 

結果

+------+--------------+-------------+ 
| id | count_all_09 | count_09_13 | 
+------+--------------+-------------+ 
| 01 |   0 |   1 | 
| 0101 |   0 |   1 | 
| 0102 |   0 |   0 | 
| 02 |   0 |   0 | 
| 0201 |   0 |   0 | 
| 0202 |   0 |   0 | 
| 0203 |   0 |   0 | 
| 03 |   0 |   0 | 
| 0301 |   0 |   0 | 
| 0302 |   0 |   0 | 
| 0303 |   0 |   0 | 
+------+--------------+-------------+ 

這樣可以把這個表結合起來嗎?

+------+-------+----------+------+----------+--------------+-------------+ 
| id | ct_id | sum_kl | tot | sum_kl2 | count_all_09 | count_09_13 | 
+------+-------+----------+------+----------+--------------+-------------+ 
| 01 |  3 | 20000000 | 3 | 20000000 |  0  |  1  | 
| 0101 |  2 | 9000000 | 2 | 9000000 |  0  |  1  | 
| 0102 |  2 | 11000000 | 2 | 11000000 |  0  |  0  | 
| 02 |  1 |  0 | 0 |  0 |  0  |  0  | 
| 0201 |  1 |  0 | 0 |  0 |  0  |  0  | 
| 0202 |  1 |  0 | 0 |  0 |  0  |  0  | 
| 0203 |  1 |  0 | 0 |  0 |  0  |  0  | 
| 03 |  2 | 4000000 | 2 | 4000000 |  0  |  0  | 
| 0301 |  1 |  0 | 1 |  0 |  0  |  0  | 
| 0302 |  2 | 4000000 | 2 | 4000000 |  0  |  0  | 
| 0303 |  1 |  0 | 1 |  0 |  0  |  0  | 
+------+-------+----------+------+----------+--------------+-------------+ 

我試過JOIN和其他很多,但它只給出一個單一的結果。這可能做到這樣的結果嗎?或者這個查詢只是給我們沒有結果?

回答

1

很難說如果通過添加所有第二個查詢邏輯,結果將會受到影響,因爲您沒有提供關於此查詢所做什麼或關於實際數據的任何信息。你可以做什麼,哪些應該總是起作用(如果你打算重複使用這個查詢,建議不要這樣做,如果性能是一個問題,那麼也不建議這麼做),只需加入整個查詢。

它看起來是這樣的:

SELECT t.*,s.count_all_09,s.count_09_13 
FROM (FIRST QUERY HERE) t 
JOIN (SECOND QUERY HERE) s 
ON(t.id = s.id) 
+0

我不知道whty但是,它給了我一個單獨的結果太 – Gagantous

+0

你說的一個結果是什麼意思? – sagi

+0

它顯示行0 - 0(總共1個,查詢需要0.0280秒。) – Gagantous