Java SQL比较表中的两个期间并获得销售结果
这张桌子是我真实桌子的一个简单例子,上面有出口商、产品、标记、托盘、数量等 但我觉得这张桌子最容易知道我的烦恼Java SQL比较表中的两个期间并获得销售结果,java,mysql,sql,mariadb,pivot-table,Java,Mysql,Sql,Mariadb,Pivot Table,这张桌子是我真实桌子的一个简单例子,上面有出口商、产品、标记、托盘、数量等 但我觉得这张桌子最容易知道我的烦恼 +----+--------+----------+----------+----------+------------+ | Id | Seller | Products | Marks | Quantity | Date | +----+--------+----------+----------+----------+------------+ | 01 | J
+----+--------+----------+----------+----------+------------+
| Id | Seller | Products | Marks | Quantity | Date |
+----+--------+----------+----------+----------+------------+
| 01 | John | Watch | Apple | 5 | 2017-01-01 |
| 02 | Peter | Mouse | Apple | 21 | 2017-01-01 |
| 02 | Peter | Mouse | Logitech | 10 | 2017-01-02 |
| 01 | John | Mouse | Logitech | 15 | 2017-01-03 |
| 02 | Peter | Keyboard | Logitech | 11 | 2017-01-05 |
| 01 | John | Keyboard | Apple | 10 | 2017-01-06 |
| 02 | Peter | Keyboard | Apple | 14 | 2017-01-06 |
| 01 | John | Keyboard | Logitech | 12 | 2017-01-06 |
| 01 | John | Keyboard | Apple | 17 | 2017-01-07 |
| 01 | John | Mouse | Logitech | 13 | 2017-01-08 |
| 01 | John | Watch | Apple | 6 | 2017-01-09 |
| . | . | . | . | . | . |
| 01 | Peter | Mouse | Logitech | 5 | 2018-01-01 |
| 02 | Steve | Keyboard | Apple | 7 | 2018-01-03 |
| 02 | Peter | Watch | Apple | 8 | 2018-01-03 |
| 01 | John | Mouse | Logitech | 6 | 2018-01-04 |
| 02 | Peter | Watch | Samsung | 9 | 2018-01-04 |
| 01 | John | Keyboard | Apple | 18 | 2018-01-08 |
| 01 | John | Watch | Apple | 7 | 2018-01-08 |
| 02 | Peter | Phone | Xiaomi | 19 | 2018-01-08 |
| 01 | John | Keyboard | Logitech | 15 | 2018-01-06 |
| 01 | Peter | TV | Samsung | 20 | 2018-01-07 |
| 01 | Steve | Display | LG | 11 | 2018-01-08 |
| 01 | John | Display | Samsung | 14 | 2018-01-08 |
| . | . | . | . | . | . |
+----+--------+----------+----------+----------+------------+
我需要在同一个表格中比较两个时期(例如2018年1月和2017年1月),以便区分卖家了解销售结果
有些像这样的
+----+--------+----------+----------+------------+------------+-----------+
| Id | Seller | Products | Marks | Total 2017 | Total 2018 | Diference |
+----+--------+----------+----------+------------+------------+-----------+
| 01 | John | Watch | Apple | 11 | 7 | -4 |
| 01 | John | Mouse | Logitech | 28 | 6 | -22 |
| 01 | John | Keyboard | Apple | 17 | 18 | 1 |
| 01 | John | Keyboard | Logitech | 12 | 15 | 3 |
| 01 | John | Display | Samsung | 0 | 14 | 14 |
| 02 | Peter | Mouse | Apple | 21 | 0 | -21 |
| 02 | Peter | Mouse | Logitech | 10 | 5 | -5 |
| 02 | Peter | Keyboard | Logitech | 11 | 0 | -11 |
| . | . | . | . | . | . | . |
| . | . | . | . | . | . | . |
| . | . | . | . | . | . | . |
+----+--------+----------+----------+------------+------------+-----------+
我尝试过这些查询,但是我得到了重复的值,并且卖家没有正确显示
选择*,(Q1-Q2)作为差异
从…起
(选择Id、卖家、产品、标记、金额(数量)作为Q1)
其中日期>='2018-01-01'和日期='2017-01-01'和日期='2018-01-01'和日期='2017-01-01'和日期只需使用条件聚合:
select Id, Seller, Products, Marks,
sum(case when year(date) = 2017 then quantity end) as quantity_2017,
sum(case when year(date) = 2018 then quantity end) as quantity_2018,
(sum(case when year(date) = 2018 then quantity end) -
sum(case when year(date) = 2017 then quantity end)
) as diff
from realtable
group by Id, Seller, Products, Marks;
最后,它工作得很好
谢谢戈登·林诺夫
SELECT ex.id_exportador,
exp.exportador,
ex.id_producto, pd.producto,
SUM((CASE WHEN (s.fechasalida >= $P{fechaInicial} AND s.fechasalida <= $P{fechaFinal}) THEN val.bultos ELSE 0 END)) AS b1,
SUM((CASE WHEN (s.fechasalida >= $P{anteriorInicial} AND s.fechasalida <= $P{anteriorFinal}) THEN val.bultos ELSE 0 END)) AS b2,
SUM((CASE WHEN (s.fechasalida >= $P{fechaInicial} AND s.fechasalida <= $P{fechaFinal}) THEN val.kg_brutos ELSE 0 END)) AS kgb1,
SUM((CASE WHEN (s.fechasalida >= $P{anteriorInicial} AND s.fechasalida <= $P{anteriorFinal}) THEN val.kg_brutos ELSE 0 END)) AS kgb2,
SUM((CASE WHEN (s.fechasalida >= $P{fechaInicial} AND s.fechasalida <= $P{fechaFinal}) THEN val.kg_netos ELSE 0 END)) AS kgn1,
SUM((CASE WHEN (s.fechasalida >= $P{anteriorInicial} AND s.fechasalida <= $P{anteriorFinal}) THEN val.kg_netos ELSE 0 END)) AS kgn2,
SUM((CASE WHEN (s.fechasalida >= $P{fechaInicial} AND s.fechasalida <= $P{fechaFinal}) THEN val.palets ELSE 0 END)) AS pal1,
SUM((CASE WHEN (s.fechasalida >= $P{anteriorInicial} AND s.fechasalida <= $P{anteriorFinal}) THEN val.palets ELSE 0 END)) AS pal2,
SUM((CASE WHEN (s.fechasalida >= $P{fechaInicial} AND s.fechasalida <= $P{fechaFinal}) THEN val.europalets ELSE 0 END)) AS epal1,
SUM((CASE WHEN (s.fechasalida >= $P{anteriorInicial} AND s.fechasalida <= $P{anteriorFinal}) THEN val.europalets ELSE 0 END)) AS epal2
FROM servicios s
LEFT JOIN expedientes ex
ON s.codservicio = ex.codservicio
LEFT JOIN exportadores exp
ON ex.id_exportador = exp.id_exportador
LEFT JOIN vales val
ON ex.id_expediente = val.id_expediente
LEFT JOIN productos pd
ON ex.id_producto = pd.id_producto
WHERE ((s.fechasalida >= $P{fechaInicial} AND s.fechasalida <= $P{fechaFinal}) OR (s.fechasalida >= $P{anteriorInicial} AND s.fechasalida <= $P{anteriorFinal})) AND ex.id_exportador IS NOT NULL
GROUP BY ex.id_exportador, ex.id_producto
选择ex.id\u exportador,
exp.exportador,
例如,我的产品,我的产品,
总和((s.fechasalida>=$P{fechaInicial}和s.fechasalida=$P{anteriorinical}和s.fechasalida=$P{fechaInicial}和s.fechasalida=$P{anteriorionicial}和s.fechasalida=$P{fechaInicial}和s.fechasalida=$P{anteriorionicial}和s.fechasalida=$P{{fechaInicial}和s.fechasalida=$P{anteriorInicial}和s.fechasalida=$P{fechaInicial}和s.fechasalida=$P{anteriorInicial}和s.fechasalida非常感谢!非常有效!
select Id, Seller, Products, Marks,
sum(case when year(date) = 2017 then quantity end) as quantity_2017,
sum(case when year(date) = 2018 then quantity end) as quantity_2018,
(sum(case when year(date) = 2018 then quantity end) -
sum(case when year(date) = 2017 then quantity end)
) as diff
from realtable
group by Id, Seller, Products, Marks;
SELECT ex.id_exportador,
exp.exportador,
ex.id_producto, pd.producto,
SUM((CASE WHEN (s.fechasalida >= $P{fechaInicial} AND s.fechasalida <= $P{fechaFinal}) THEN val.bultos ELSE 0 END)) AS b1,
SUM((CASE WHEN (s.fechasalida >= $P{anteriorInicial} AND s.fechasalida <= $P{anteriorFinal}) THEN val.bultos ELSE 0 END)) AS b2,
SUM((CASE WHEN (s.fechasalida >= $P{fechaInicial} AND s.fechasalida <= $P{fechaFinal}) THEN val.kg_brutos ELSE 0 END)) AS kgb1,
SUM((CASE WHEN (s.fechasalida >= $P{anteriorInicial} AND s.fechasalida <= $P{anteriorFinal}) THEN val.kg_brutos ELSE 0 END)) AS kgb2,
SUM((CASE WHEN (s.fechasalida >= $P{fechaInicial} AND s.fechasalida <= $P{fechaFinal}) THEN val.kg_netos ELSE 0 END)) AS kgn1,
SUM((CASE WHEN (s.fechasalida >= $P{anteriorInicial} AND s.fechasalida <= $P{anteriorFinal}) THEN val.kg_netos ELSE 0 END)) AS kgn2,
SUM((CASE WHEN (s.fechasalida >= $P{fechaInicial} AND s.fechasalida <= $P{fechaFinal}) THEN val.palets ELSE 0 END)) AS pal1,
SUM((CASE WHEN (s.fechasalida >= $P{anteriorInicial} AND s.fechasalida <= $P{anteriorFinal}) THEN val.palets ELSE 0 END)) AS pal2,
SUM((CASE WHEN (s.fechasalida >= $P{fechaInicial} AND s.fechasalida <= $P{fechaFinal}) THEN val.europalets ELSE 0 END)) AS epal1,
SUM((CASE WHEN (s.fechasalida >= $P{anteriorInicial} AND s.fechasalida <= $P{anteriorFinal}) THEN val.europalets ELSE 0 END)) AS epal2
FROM servicios s
LEFT JOIN expedientes ex
ON s.codservicio = ex.codservicio
LEFT JOIN exportadores exp
ON ex.id_exportador = exp.id_exportador
LEFT JOIN vales val
ON ex.id_expediente = val.id_expediente
LEFT JOIN productos pd
ON ex.id_producto = pd.id_producto
WHERE ((s.fechasalida >= $P{fechaInicial} AND s.fechasalida <= $P{fechaFinal}) OR (s.fechasalida >= $P{anteriorInicial} AND s.fechasalida <= $P{anteriorFinal})) AND ex.id_exportador IS NOT NULL
GROUP BY ex.id_exportador, ex.id_producto