SELECT
invono, date, vendorid, vendor, model, color,
qty, weight, unitpri, amt, mem
FROM (
SELECT
*,
@group_id := IF(
@current_group = CONCAT_WS('|', vendorid, model, color),
@group_id,
@group_id + 1
) AS group_id,
@row_num := IF(
@current_group = CONCAT_WS('|', vendorid, model, color),
@row_num + 1,
1
) AS row_num,
@current_group := CONCAT_WS('|', vendorid, model, color) AS current_group
FROM (
SELECT
subptin1.invono,
subptin1.date,
subptin1.vendorid,
subvendor1.vendor,
subptou2.model,
subptou2.color,
subptin2.qty,
subptin2.weight,
subptin2.unitpri,
ROUND(subptin2.qty * subptin2.unitpri, 2) AS amt,
subptin2.mem
FROM subptin1
INNER JOIN subptin2 ON subptin2.invono = subptin1.invono
INNER JOIN subptou2 ON subptou2.mid = subptin2.id
INNER JOIN subptou1 ON subptou1.invono = subptou2.invono
LEFT JOIN subvendor1 ON subvendor1.vendorid = subptin1.vendorid
WHERE DATE_FORMAT(subptin1.date, '%Y-%m') = DATE_FORMAT(NOW(), '%Y-%m')
AND (subptin1.vendorid, subptou2.model, subptou2.color) IN (
SELECT
v1.vendorid,
m1.model,
m1.color
FROM subptin1 v1
INNER JOIN subptin2 d1 ON d1.invono = v1.invono
INNER JOIN subptou2 m1 ON m1.mid = d1.id
WHERE DATE_FORMAT(v1.date, '%Y-%m') = DATE_FORMAT(NOW(), '%Y-%m')
GROUP BY v1.vendorid, m1.model, m1.color
HAVING COUNT(DISTINCT d1.unitpri) > 1
)
ORDER BY subptin1.vendorid, subptou2.model, subptou2.color
) base
CROSS JOIN (SELECT @group_id := 0, @row_num := 0, @current_group := '') vars
) numbered
UNION ALL
-- 添加空白行分隔每组
SELECT
NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL
FROM (
SELECT group_id, MAX(row_num) AS max_row
FROM (
SELECT
@group_id2 := IF(
@current_group2 = CONCAT_WS('|', vendorid, model, color),
@group_id2,
@group_id2 + 1
) AS group_id,
@row_num2 := IF(
@current_group2 = CONCAT_WS('|', vendorid, model, color),
@row_num2 + 1,
1
) AS row_num,
@current_group2 := CONCAT_WS('|', vendorid, model, color) AS current_group
FROM (
SELECT
subptin1.vendorid,
subptou2.model,
subptou2.color
FROM subptin1
INNER JOIN subptin2 ON subptin2.invono = subptin1.invono
INNER JOIN subptou2 ON subptou2.mid = subptin2.id
WHERE DATE_FORMAT(subptin1.date, '%Y-%m') = DATE_FORMAT(NOW(), '%Y-%m')
GROUP BY subptin1.vendorid, subptou2.model, subptou2.color
HAVING COUNT(DISTINCT subptin2.unitpri) > 1
) base_groups
CROSS JOIN (SELECT @group_id2 := 0, @row_num2 := 0, @current_group2 := '') vars
) tmp
GROUP BY group_id
) group_max
ORDER BY
COALESCE(group_id, 999999),
COALESCE(row_num, 999999); 这段代码,-- 添加空白行分隔每组 不正确,其他都是正确的,请修正
最新发布