#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;