2009-11-23 16 views
5

Ho problemi con l'utilizzo di un'istruzione IF all'interno di questa query sql-server.sql-server, istruzione IF all'interno di SQL Query

quello che voglio:

Se salesHeader.[Ship-to Name] non è nullo, ho bisogno di tornare che AS DeliveryName, se si tratta di nulla, tornare qualcosa di diverso.

C'è un modo per farlo con una dichiarazione if in una query?

SELECT 
    poHeader.No_ AS PONumber, 
    poHeader.[Buy-from Vendor No_] AS VendorNumber, 
    poHeader.[Document Date] AS DocDate, 
    salesHeader.GiftMessage, 
    salesHeader.[Delivery Comment] AS DeliveryComment,      
    salesHeader.[Shipment Date] AS DeliveryDate, 
    IF salesHeader.[Ship-to Name] IS NOT NULL 
     salesHeader.[Ship-to Name] AS DeliveryName 
    ELSE 
     poHeader.[Ship-to Name] AS DeliveryName 
    END 
FROM   
    dbo.[Crocus Live$Purch_ orders for e-mailing] AS poForEmailing 
LEFT OUTER JOIN 
    dbo.[Crocus Live$Purchase Header] AS poHeader ON poForEmailing.No_ = poHeader.No_ 
INNER JOIN 
    dbo.[Crocus Live$Vendor] AS vendor ON poHeader.[Buy-from Vendor No_] = vendor.No_ 
LEFT OUTER JOIN 
    dbo.[Crocus Live$Sales Header] AS salesHeader ON salesHeader.No_ = dbo.fnGetSalesOrderNumber(poHeader.No_) 

risposta

9

Oppure utilizzare COALESCE ...

SELECT 
COALESCE(salesHeader.[Ship-to Name], poHeader.[Ship-to Name]) AS DeliveryName 

COALESCE restituirà il primo valore non NULL nella lista

11

dei casi d'uso, se non

CASE 
    WHEN salesHeader.[Ship-to Name] IS NOT NULL THEN salesHeader.[Ship-to Name] 
    ELSE poHeader.[Ship-to Name] 
END AS DeliveryName 

Edit:

Sia fondono e IsNull risposte dare in altre risposte sono ugualmente valide anche per questo caso particolare (e più semplice, francamente)

1

Non sono sicuro, ma non è necessario inserire "AS DeliveryName" all'esterno del IF?

Almeno questo è come funziona in MySQL ...

5

Puoi Caso d'uso:

(CASE WHEN cond-1 THEN value-if-1 
     WHEN cond-2 THEN value-if-2 
     ELSE default-value END) AS column-name 

o in questo caso è possibile usare COALESCE o ISNULL:

COALESCE(salesHeader.[Ship-to Name], poHeader.[Ship-to Name]) AS DeliveryName 

ISNULL(salesHeader.[Ship-to Name], poHeader.[Ship-to Name]) AS DeliveryName