Вернуть нижнюю из двух дат или конкретный текст, если обе являются нулевыми - PullRequest
0 голосов
/ 01 июня 2018

Я пытаюсь найти нижнюю дату из двух полей.Поле также может быть NULL, поэтому выберите не NULL или, если оба значения NULL, то из этого заполняется 'Some Error'

POdate (я помещаю это во временную таблицу вместе с другими полями)

    (SELECT MIN(PD.ReceiptDate)
FROM Structure.Parts
INNER JOIN Purchase.PurchaseOrderDetails PD   ON pd.PartID = structure.Parts.PartID    
INNER JOIN Purchase.PurchaseOrders PO     
ON PD.PurchaseOrderNumber = PO.PurchaseOrderNumber 
WHERE Structure.Parts.Partnumber = sp.PartNumber AND (PO.PurchaseOrderStatusCode < 4) --4 Complete 5 --Cancelled       
AND (PD.ReceiptStatusID IN (1,2) )) AS POdate,

И вот так (я помещаю это во временную таблицу вместе с другими полями)

(SELECT MIN(wt.CompletionDate)
FROM Structure.Parts
INNER JOIN Production.WorksOrder as wo     
ON  wo.PartID = Structure.Parts.PartID  
INNER JOIN Production.WorksOrderTransfers  wt ON wt.WorksOrderNumber = wo.WorksOrderNumber  
WHERE Structure.Parts.Partnumber = sp.PartNumber AND wt.WorksOrderStatusCode < 4      
AND (wt.BatchQuantity - ISNULL (wt.QuantityStored,0)) > 0 )
 AS WOdate,

Здесь есть мой оператор Case

CASE
WHEN POdate IS NULL THEN CAST(WOdate AS varchar (25))
WHEN WOdate IS NULL THEN CAST (POdate AS varchar (25))
WHEN POdate > WOdate THEN CAST (WOdate AS varchar (25)) 
WHEN POdate < WOdate THEN CAST (POdate AS varchar (25)) 
ELSE 'No Planned Stock'

END AS StockDueIn

Любые указатели будут оченьвысоко ценится

1 Ответ

0 голосов
/ 01 июня 2018

Это должно охватывать все возможные сценарии

CASE
WHEN POdate IS NULL AND WOdate IS NULL
    THEN 'No Planned Stock'
--If desired output for BOTH EQUAL case is 'No Planned Stock'
--replace the above WHEN with below one
--WHEN ISNULL(POdate, '99990101') = ISNULL(WOdate, '99990101')
    --THEN 'No Planned Stock'
WHEN ISNULL(POdate, '99990101') > ISNULL(WOdate, '99990101')
    THEN CAST (WOdate AS varchar (25)) 
WHEN ISNULL(POdate, '99990101') < ISNULL(WOdate, '99990101')
    THEN CAST (POdate AS varchar (25)) 
END AS StockDueIn
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...