2017-09-24 164 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