Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SQL比较表中的两个期间并获得销售结果_Java_Mysql_Sql_Mariadb_Pivot Table - Fatal编程技术网

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