2009-11-23 20 views
5

के भीतर IF कथन मुझे इस SQL ​​सर्वर क्वेरी में IF कथन का उपयोग करने में समस्या हो रही है।एसक्यूएल-सर्वर, अगर SQL क्वेरी

मुझे क्या करना चाहते हैं:

तो salesHeader.[Ship-to Name] अशक्त नहीं है, मुझे लगता है कि वापस जाने के लिए DeliveryName के रूप में की जरूरत है, अगर यह रिक्त है, कुछ और ही लौट आते हैं।

क्या कोई प्रश्न में if कथन के साथ ऐसा करने का कोई तरीका है?

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_) 

उत्तर

9

या COALESCE का उपयोग करें ...

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

COALESCE सूची में पहले गैर-शून्य मान प्रदान करेंगे

11

उपयोग के मामले, नहीं यदि

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

संपादित करें:

दोनों COALESCE और IsNull जवाब अन्य उत्तर में (स्पष्ट रूप से और सरल,) देने के इस विशेष मामले के लिए भी समान रूप से मान्य हैं

1

सुनिश्चित नहीं है, लेकिन आपको के बाहर 'AS DeliveryName' डालना नहीं है?

कम से कम है कि यह कैसे MySQL में काम करता है ...

5

आप कर सकते हैं उपयोग के मामले:

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

या इस स्थिति में आप COALESCE या IsNull उपयोग कर सकते हैं:

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

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

जैसा कि जीबीएन ने कहा, इसके बजाय केस स्टेटमेंट का उपयोग करें।

चूंकि उसने कोडिंग पहले से ही कर ली है, इसलिए मैं वही चीज़ फिर से नहीं रखना चाहता हूं।

इसके बजाय केवल आपके कुछ साइट अपनी समझ

एक) SQL SERVER – CASE Statement/Expression Examples and Explanation

ख) CASE function in SQL Server 2005 - part I

ग) CASE function in SQL Server 2005 - part II

घ) CASE Function in SQL Server 2005 - part III

के लिए उल्लेख करने के लिए दे रही है