Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Работа Новый топик    Ответить
 SQL. Объединение полей в одной таблице. Отблагодарю материально!  [new]
skydog
Member

Откуда:
Сообщений: 22
Есть такой скрипт который выводит две таблицы. Наименования с типом String и подсчет с типом Long.
Как можно объединить одинаковые поля "Нет в наличии" в одно поле и раздельные поля "брак" , "пересорт" в одно поле "брак /пересорт" в одной таблице. При этом сохранив типы двух таблиц и получить объединенные значения в новых полях. И как не выводить лишние поля, например, форма для сотрудников и тд.
Я знаю что можно использовать структуру CASE,WHEN,THEN. Но не понимаю как правильно описать это в моем скрипте.

SELECT rl.reason AS reject_reason, COUNT(*)
 
FROM
    mp.reservation_log AS rl
    JOIN
    mp.store AS st ON rl.store_id = st.md_id
    JOIN mp.order_item oi ON oi.reserve_id=rl.reservation_id
    JOIN mp.sku s ON s.id=oi.item_id
    JOIN mp.product p ON p.id=s.product_id
WHERE rl.created_at > DATE(NOW()) - INTERVAL 1 MONTH AND rl.is_successful=0
GROUP BY rl.reason;


Готова заплатить за помощь или отблагодарить по договоренности.
22 мар 20, 16:19    [22103985]     Ответить | Цитировать Сообщить модератору
 Re: SQL. Объединение полей в одной таблице. Отблагодарю материально!  [new]
skydog
Member

Откуда:
Сообщений: 22
Добавила картинку.

К сообщению приложен файл. Размер - 39Kb
22 мар 20, 16:40    [22103995]     Ответить | Цитировать Сообщить модератору
 Re: SQL. Объединение полей в одной таблице. Отблагодарю материально!  [new]
nullin
Member

Откуда: pullin
Сообщений: 141
skydog,
SELECT b.reject_reason, COUNT(*) AS quantity
FROM
    (SELECT rl.reason
     FROM
         mp.reservation_log AS rl
         JOIN
         mp.store AS st ON rl.store_id = st.md_id
         JOIN mp.order_item oi ON oi.reserve_id=rl.reservation_id
         JOIN mp.sku s ON s.id=oi.item_id
         JOIN mp.product p ON p.id=s.product_id
     WHERE rl.created_at > DATE(NOW()) - INTERVAL 1 MONTH AND rl.is_successful=0
     ) AS a
OUTER APPLY(VALUES(CASE 
                    WHEN a.reason in('Брак', 'Пересорт', 'Брак/пересорт') then 'Брак/пересорт'
                    WHEN a.reason in('Нет в наличии', 'НетВНаличии') then 'Нет в наличии'
                    ELSE a.reason
                   END)
            ) AS b(reject_reason)
GROUP BY b.reject_reason;
22 мар 20, 18:12    [22104032]     Ответить | Цитировать Сообщить модератору
 Re: SQL. Объединение полей в одной таблице. Отблагодарю материально!  [new]
skydog
Member

Откуда:
Сообщений: 22
Не понимает что такое OUTER, подчеркивает красным
22 мар 20, 18:37    [22104042]     Ответить | Цитировать Сообщить модератору
 Re: SQL. Объединение полей в одной таблице. Отблагодарю материально!  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30821
skydog
Не понимает что такое OUTER, подчеркивает красным
А версия сиквела какая?
22 мар 20, 18:42    [22104043]     Ответить | Цитировать Сообщить модератору
 Re: SQL. Объединение полей в одной таблице. Отблагодарю материально!  [new]
skydog
Member

Откуда:
Сообщений: 22
8
22 мар 20, 18:44    [22104046]     Ответить | Цитировать Сообщить модератору
 Re: SQL. Объединение полей в одной таблице. Отблагодарю материально!  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30821
alexeyvg
skydog
Не понимает что такое OUTER, подчеркивает красным
А версия сиквела какая?
А, это же не сиквел...

Напишите, на какой СУБД это.

Мда, вот так и на работе задания дают, пишешь прогу для виндоуз, а нужно было модуль для линукса в телевизоре.
22 мар 20, 18:44    [22104047]     Ответить | Цитировать Сообщить модератору
 Re: SQL. Объединение полей в одной таблице. Отблагодарю материально!  [new]
skydog
Member

Откуда:
Сообщений: 22
alexeyvg, тогда нужно было спросить какая СУБД, а не версию. mysql - 8.
22 мар 20, 18:49    [22104050]     Ответить | Цитировать Сообщить модератору
 Re: SQL. Объединение полей в одной таблице. Отблагодарю материально!  [new]
nullin
Member

Откуда: pullin
Сообщений: 141
.
Попробуйте так:
SELECT a.reject_reason, COUNT(*) AS quantity
FROM
    (SELECT CASE 
             WHEN a.reason in('Брак', 'Пересорт', 'Брак/пересорт') then 'Брак/пересорт'
             WHEN a.reason in('Нет в наличии', 'НетВНаличии') then 'Нет в наличии'
             ELSE a.reason
            END AS reject_reason
     FROM
         mp.reservation_log AS rl
         JOIN
         mp.store AS st ON rl.store_id = st.md_id
         JOIN mp.order_item oi ON oi.reserve_id=rl.reservation_id
         JOIN mp.sku s ON s.id=oi.item_id
         JOIN mp.product p ON p.id=s.product_id
     WHERE rl.created_at > DATE(NOW()) - INTERVAL 1 MONTH AND rl.is_successful=0
     ) AS a
GROUP BY a.reject_reason;


Сообщение было отредактировано: 22 мар 20, 18:50
22 мар 20, 18:50    [22104052]     Ответить | Цитировать Сообщить модератору
 Re: SQL. Объединение полей в одной таблице. Отблагодарю материально!  [new]
skydog
Member

Откуда:
Сообщений: 22
nullin,
нет такой таблицы a.reason, изменяла на rl.reason - не помогло
давайте по другому.
Как мне отобрать не все поля для вывода? как-то можно написать условие что-бы выводить не все поля в таблице?

Сообщение было отредактировано: 22 мар 20, 19:11
22 мар 20, 19:02    [22104055]     Ответить | Цитировать Сообщить модератору
 Re: SQL. Объединение полей в одной таблице. Отблагодарю материально!  [new]
nullin
Member

Откуда: pullin
Сообщений: 141
skydog, во вложенном запросе поменяйте только Картинка с другого сайта.
22 мар 20, 19:11    [22104058]     Ответить | Цитировать Сообщить модератору
 Re: SQL. Объединение полей в одной таблице. Отблагодарю материально!  [new]
skydog
Member

Откуда:
Сообщений: 22
nullin,

эмм?)как
22 мар 20, 19:14    [22104061]     Ответить | Цитировать Сообщить модератору
 Re: SQL. Объединение полей в одной таблице. Отблагодарю материально!  [new]
nullin
Member

Откуда: pullin
Сообщений: 141
nullin
.
Попробуйте так:
<...>FROM(
SELECT CASE 
        WHEN rl.reason in('Брак', 'Пересорт', 'Брак/пересорт') then 'Брак/пересорт'
        WHEN rl.reason in('Нет в наличии', 'НетВНаличии') then 'Нет в наличии'
        ELSE rl.reason
       END AS reject_reason
<...>


Сообщение было отредактировано: 22 мар 20, 19:18
22 мар 20, 19:18    [22104065]     Ответить | Цитировать Сообщить модератору
Все форумы / Работа Ответить