Как обрабатывать те же АЛИКИЕ записи в базе данных, что и в группе By - PullRequest
0 голосов
/ 19 апреля 2019

Я пытаюсь выполнить запрос Mysql, чтобы сгруппировать все те же записи в базе данных как одну. У меня есть база данных с разными именами цветов, записи в базе данных похожи на

Contract        Color

OG-46374    I.Khaki
OG-46375    I-KHAKI
OG-46376    I KHAKI
OG-46377    W Ocher
OG-46378    W.Ocher

Теперь проблема в том, что моя база данных обрабатывает все эти значения как разные записи, тогда как я не могу обработать или заставить оператора написать точные значения, как я могу рассматривать все цвета "я хаки" и W ocher как один не разные цвета в группе по предложению Мой запрос Sql похож на

SELECT 
    *,
    ROUND(SUM(meter_yard_length), 0) AS TotaL_Length_Contract,
    ROUND(SUM(IF(quality = 'A', meter_yard_length, 0)),
            0) AS A_Quality_length,
    ROUND(SUM(IF(quality = 'B', meter_yard_length, 0)),
            0) AS B_Quality_length GROUP BY r.contract_no, r.color DESC;

Пожалуйста, скажите универсальное решение, потому что у меня есть много возможностей, таких как «I * хаки», «I - хаки» и т. Д. Я не могу контролировать их все путем замены и т. Д.

1 Ответ

0 голосов
/ 19 апреля 2019

Этот ответ основан на очень ограниченных выборочных данных, которые вы предоставили. Я вижу две проблемы с названиями цветов. Во-первых, не все буквы в одном и том же случае всегда. Во-вторых, в данной позиции может быть пробел, точка или тире, когда на самом деле все три представляют одно и то же логическое имя. Мы можем попытаться использовать REPLACE для преобразования точек и тире в пространство, а затем использовать LOWER() для решения проблемы с регистром.

SELECT 
    contract_no,
    LOWER(REPLACE(REPLACE(color, '.', ' '), '-', ' '))
    ROUND(SUM(meter_yard_length), 0) AS TotaL_Length_Contract,
    ROUND(SUM(IF(quality = 'A', meter_yard_length, 0)),
        0) AS A_Quality_length,
    ROUND(SUM(IF(quality = 'B', meter_yard_length, 0)),
        0) AS B_Quality_length
FROM yourTable
GROUP BY
    contract_no,
    LOWER(REPLACE(REPLACE(color, '.', ' '), '-', ' '));

Демо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...