SQL — Запрос, Который Просматривает 3 Столбца И Извлекает Только Непустое Значение

#mysql #sql #database

Вопрос:

Я ищу способ извлечь все счета-фактуры из таблицы с номером отслеживания для этого счета. Например:

SELECT Invoice, FedEx, UPS, DHL from shipfile

будут показаны все счета-фактуры и все номера отслеживания. Если он был отправлен FedEx, номер отслеживания будет указан в столбце FedEx. То же самое и с остальными. Я хочу иметь возможность вытащить счет-фактуру, а затем 1 другую колонку «Отслеживание», в которой будет отображаться результат FedEx, UPS или DHL (который когда-либо содержит номер отслеживания). Поэтому, если есть номер отслеживания FedEx, UPS и DHL будут пустыми, поэтому я хотел бы увидеть счет-фактуру и номер отслеживания FedEx. И то же самое, если у него есть отслеживание UPS, FedEx и DHL будут пустыми, поэтому я хочу видеть только результат UPS.

До:

 Invoice  FedEx   UPS   DHL


1        F123    

2                U321

3                      D746
 

После:

 Invoice    Tracking

1          F123

2          U321

3          D746
 

Ответ №1:

Предполагая , что эти «пустые» значения на самом деле NULL таковы, мы можем использовать COALESCE здесь:

 SELECT Invoice, COALESCE(FedEx, UPS, DHL) AS Tracking
FROM shipfile;
 

Если пустые значения действительно являются пустой строкой, то вместо этого используйте скалярную GREATEST функцию:

 SELECT Invoice, GREATEST(FedEx, UPS, DHL) AS Tracking
FROM shipfile;
 

Комментарии:

1. Большое спасибо. После более детального изучения, это просто пустая строка, так что, похоже, GREATEST делает свое дело. Еще раз спасибо!

Ответ №2:

Воспользуйся coalesce() :

 select invoice, coalesce(fedex, ups, dhl) as tracking_number
from shipfile;