我有这个功能查询:
SELECT t1.material, t1.totalS, t2.totalH, (t1.totalS + t2.totalH) as producto, t1.fecha_dbfS, t2.fecha_dbfH FROM (SELECT material, STR_TO_DATE(fe_contab, '%d-%m-%Y') AS fecha_dbfS, SUM(impteml) AS TotalS FROM datos WHERE d_h ='S' GROUP BY material) as t1, (SELECT material, STR_TO_DATE(fe_contab, '%d-%m-%Y') AS fecha_dbfH, SUM(impteml) AS TotalH FROM datos WHERE d_h ='H' GROUP BY material) as t2 WHERE t1.material = t2.material and t1.fecha_dbfS >= '$fechai'and t1.fecha_dbfS <= '$fechaf' and t2.fecha_dbfH >= '$fechai' and t2.fecha_dbfH <= '$fechaf'
显示这样的数据(DTR = Material )Query Result
我还有另一个名为 nombre_dtr 的表,它的数据排列如下:
我需要将存储在 nombre_dtr 表中的 DTR 名称作为“nombre”添加到第一个表(查询结果)中,使用该表上的 DTR 字段对表上的“material”字段进行数学计算“datos”表,我尝试了左连接和内连接,但没有成功。
任何帮助将不胜感激
最佳答案
实际上,您可以通过使用带有 case 语句的聚合函数和连接表 nombre_dtr
来简化查询,以按每个 material
获取列 nombre
SELECT d.material,
n.nombre,
SUM(CASE WHEN d.d_h = 'S' THEN d.impteml ELSE 0 END) AS TotalS,
SUM(CASE WHEN d.d_h = 'H' THEN d.impteml ELSE 0 END) AS TotalH,
SUM(d.impteml) AS producto,
MAX(CASE WHEN d.d_h = 'S' THEN STR_TO_DATE(d.fe_contab, '%d-%m-%Y') END) fecha_dbfS,
MAX(CASE WHEN d.d_h = 'H' THEN STR_TO_DATE(d.fe_contab, '%d-%m-%Y') END) fecha_dbfH
FROM datos d
INNER JOIN nombre_dtr n
ON d.material = n.dtr
WHERE STR_TO_DATE(d.fe_contab, '%d-%m-%Y') >= '$fechai'
AND STR_TO_DATE(d.fe_contab, '%d-%m-%Y') <= '$fechaf'
GROUP BY d.material, n.nombre
这是关于 SQL Join 的指南.
关于mysql - 如何将其他表的数据添加到双单表MySQL查询中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48654939/