У меня проблема с MySQL созданием переменной счетчика SOrder на основе установленного порядка, определенного порядком по. Он работал в MySQL 5.1, но в настоящее время не работает в 5.7. Исходный запрос в версии 5.1 имел порядок подзапросов и был приемлемым для стандартов того времени. В версии 5.7 с отключенным режимом only_full_group_by я добавил порядок по внешнему, но даже когда порядок внутри подзапроса был закомментирован (или проигнорирован в соответствии со стандартами SQL), он выводит SOrder, как если бы он был случайным, но не на основе столбца Carrier, PRIOR, ShipMethod, SingleModel.
SELECT
Carrier,
PRIOR,
ShipMethod,
GroupOrder,
@row_no:=IF(@prev_val = ANY_VALUE(t.SingleModel),
@row_no,
@row_no + 1) AS 'SOrder',
SingleModel,
COUNT(t.SingleModel) AS 'SingleModelTotQty',
@prev_val:=ANY_VALUE(t.SingleModel)
FROM
(SELECT
CASE
WHEN ANY_VALUE(W.hdr_user_defined_field18) LIKE '%Fedex%' THEN 'FEDEX'
ELSE 'UPS'
END AS 'Carrier',
CASE
WHEN
ANY_VALUE(W.hdr_user_defined_field20) IN ('16' , '26', '45', '88', '96')
OR ANY_VALUE(W.hdr_user_defined_field20) IN ('19' , '21', '22', '23', '24', '44', '76', '77', '78')
THEN 'PRIOR'
ELSE 'NORM'
END AS 'PRIOR',
CASE
WHEN
ANY_VALUE(W.hdr_user_defined_field20) IN ('88' , '96', '80', '97')
OR ANY_VALUE(W.hdr_user_defined_field20) IN ('76' , '77', '78', '79')
OR ANY_VALUE(W.`Ship-To Location`) != ''
THEN 'S2S'
ELSE 'S2H'
END AS 'ShipMethod',
CASE
WHEN SUM(Quantity) = 1 THEN 'Single'
WHEN
SUM(Quantity) > 1 AND COUNT(`PO Number`) = 1
THEN 'Multiple'
WHEN COUNT(`PO Number`) > 1 THEN 'Mixed'
END AS 'GroupOrder',
CASE
WHEN SUM(Quantity) = 1 THEN `Supplier Item Nbr`
WHEN SUM(Quantity) > 1
AND COUNT(`PO Number`) = 1
THEN ' '
WHEN COUNT(`PO Number`) > 1 THEN ' '
END AS 'SingleModel',
`PO Number` AS 'PONUM',
CASE
WHEN SUM(Quantity) = 1 THEN ' '
ELSE SUM(Quantity)
END AS 'QtyPerMulPO'
FROM
dropship.Walmart_FullPOs W
WHERE
ProcessedDate = CURDATE() - 5
GROUP BY `PO Number`
**ORDER BY Carrier , PRIOR DESC , ShipMethod , GroupOrder DESC , SingleModel DESC**
) t,
(SELECT @row_no:=0) x,
(SELECT @prev_val:='') y
WHERE
GroupOrder = 'Single'
GROUP BY Carrier , PRIOR , ShipMethod , SingleModel
ORDER BY t.Carrier , t.PRIOR DESC , t.ShipMethod , t.GroupOrder DESC , t.SingleModel DESC
Результат Результат