繁体   English   中英

如何将两个查询合并为一个子查询

[英]How to merge two queries into a subqueries

我有这样的数据库http://sqlfiddle.com/#!9/e52c43

第一个查询是:

SELECT m.tanggal, sum(mi.qty) as totalMuatan, mi.idPlastik 
FROM tblMuatan m
LEFT JOIN tblMuatanIsi mi ON m.idMuatan = mi.idMuatan
WHERE m.tanggal='2020-03-15'
GROUP BY mi.idPlastik

结果是:

tanggal       totalMuatan    idPlastik
2020-03-15    85             1
2020-03-15    10             2

第二个查询是:

SELECT s.tanggal, sum(si.qty) as totalStok, si.idPlastik

FROM tblStok s

LEFT JOIN tblStokIsi si ON s.idStok = si.idStok
WHERE s.tanggal = '2020-03-15'
GROUP BY si.idPlastik

结果是:

tanggal       totalStok    idPlastik
2020-03-15    100          1
2020-03-15    200          2

我想将这 2 个查询合并为带有子查询的单个查询

tanggal       totalStok     totalMuatan     netTotal    idPlastik
2020-03-15    100           85              15          1
2020-03-15    200           10              190         2

如何做上面例子中的子查询? 谢谢你的支持

SELECT a.tanggal, 
       b.totalstok, 
       a.totalmuatan, 
       ( totalstok - totalmuatan ) netTotal, 
       a.idplastik 
FROM   (SELECT convert(varchar, m.tanggal, 23) tanggal, 
               Sum(mi.qty) AS totalMuatan, 
               mi.idplastik 
        FROM   #tblmuatan m 
               LEFT JOIN #tblmuatanisi mi 
                      ON m.idmuatan = mi.idmuatan 
        WHERE  m.tanggal = 1 
        GROUP  BY mi.idplastik, 
                  convert(varchar, m.tanggal, 23)) a 
       JOIN (SELECT convert(varchar, s.tanggal, 23) tanggal, 
                    Sum(si.qty) AS totalStok, 
                    si.idplastik 
             FROM   #tblstok s 
                    LEFT JOIN #tblstokisi si 
                           ON s.idstok = si.idstok 
             WHERE  s.tanggal = 1 
             GROUP  BY si.idplastik, 
                       convert(varchar, s.tanggal, 23)) b 
         ON a.idplastik = b.idplastik 

请尝试..

SELECT T1.tanggal, T2.totalStok, T1.totalMuatan, (T2.totalStok - T1.totalMuatan), T1.idPlastik
FROM
(SELECT m.tanggal, sum(mi.qty) as totalMuatan, mi.idPlastik 
FROM tblMuatan m
LEFT JOIN tblMuatanIsi mi ON m.idMuatan = mi.idMuatan
WHERE m.tanggal='2020-03-15'
GROUP BY mi.idPlastik) 
as T1,
(SELECT s.tanggal, sum(si.qty) as totalStok, si.idPlastik
FROM tblStok s
LEFT JOIN tblStokIsi si ON s.idStok = si.idStok
WHERE s.tanggal = '2020-03-15'
GROUP BY si.idPlastik)
as T2
WHERE
T1.tanggal = T2.tanggal;

最好使用COALESCE因为您对要计算SUM的表使用LEFT JOIN以避免对具有NULL值的记录没有结果。

select m.tanggal, t.totalStok, sum(mi.qty) as totalMuatan, coalesce(t.totalStok,0)-coalesce(sum(mi.qty),0) as netTotal, mi.idPlastik 
from tblMuatan m
LEFT JOIN tblMuatanIsi mi ON m.idMuatan = mi.idMuatan
JOIN (SELECT s.tanggal, sum(si.qty) as totalStok, si.idPlastik 
FROM tblStok s 
LEFT JOIN tblStokIsi si ON s.idStok = si.idStok 
WHERE s.tanggal='2020-03-15'
GROUP BY s.tanggal,si.idPlastik) t on m.tanggal=t.tanggal and mi.idPlastik = t.idPlastik 
group by  m.tanggal, t.totalStok,mi.idPlastik 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM