2009-11-02 14 views
64

मेरे पास एक Microsoft SQL Server 2008 क्वेरी है जो बाएं बाहरी जुड़ने का उपयोग करके तीन तालिकाओं से डेटा लौटाती है। कई बार, दूसरी और तीसरी तालिकाओं में कोई डेटा नहीं होता है और इसलिए मुझे एक शून्य मिलती है जो मुझे लगता है कि बाएं बाहरी जुड़ने के लिए डिफ़ॉल्ट है। क्या चयनित कथन में डिफ़ॉल्ट मानों को प्रतिस्थापित करने का कोई तरीका है? मेरे पास एक वर्कअराउंड है जिसमें मैं टेबल वैरिएबल में चयन कर सकता हूं लेकिन यह थोड़ा गंदा लगता है।बाएं बाहरी से लौटाए गए डिफ़ॉल्ट शून्य मानों को बदलें

SELECT iar.Description, iai.Quantity, iai.Quantity * rpl.RegularPrice as 'Retail', 
iar.Compliance FROM InventoryAdjustmentReason iar 
LEFT OUTER JOIN InventoryAdjustmentItem iai on (iar.Id = iai.InventoryAdjustmentReasonId) 
LEFT OUTER JOIN Item i on (i.Id = iai.ItemId) 
LEFT OUTER JOIN ReportPriceLookup rpl on (rpl.SkuNumber = i.SkuNo) 
WHERE iar.StoreUse = 'yes' 

मैं मात्रा और नियमित प्लस को संभवतः शून्य पर डिफ़ॉल्ट रूप से डिफ़ॉल्ट करना चाहता हूं।

उत्तर

102

जितना आसान

IsNull(FieldName, 0) 

या अधिक पूरी तरह से है कि:

SELECT iar.Description, 
    ISNULL(iai.Quantity,0) as Quantity, 
    ISNULL(iai.Quantity * rpl.RegularPrice,0) as 'Retail', 
    iar.Compliance 
FROM InventoryAdjustmentReason iar 
LEFT OUTER JOIN InventoryAdjustmentItem iai on (iar.Id = iai.InventoryAdjustmentReasonId) 
LEFT OUTER JOIN Item i on (i.Id = iai.ItemId) 
LEFT OUTER JOIN ReportPriceLookup rpl on (rpl.SkuNumber = i.SkuNo) 
WHERE iar.StoreUse = 'yes' 
+3

मुझे पता था कि इसे आसान होना था, लेकिन किसी कारण से, मुझे इसे कैसे करना है, इस पर अवरुद्ध किया गया था। धन्यवाद। –

+29

यदि यह MySQL है, तो IsNull को 'IFNULL' से बदला जाना चाहिए। धन्यवाद। – Dhanushka

+10

PostgreSQL में, ऐसा लगता है ["COALESCE"] (http://www.postgresql.org/docs/9.3/static/functions-conditional.html)। MySQL के लिए, मैन्युअल पृष्ठ यहां है: ["IFNULL"] (http://dev.mysql.com/doc/refman/5.7/en/control-flow-functions.html)। मानक के बारे में निश्चित नहीं है। –

0

नहीं उसकी IsNull इस IFNULL में,।

SELECT iar.Description, 
     IFNULL(iai.Quantity,0) as Quantity, 
     IFNULL(iai.Quantity * rpl.RegularPrice,0) as 'Retail', 
     iar.Compliance 
    FROM InventoryAdjustmentReason iar 
    LEFT OUTER JOIN InventoryAdjustmentItem iai on (iar.Id = iai.InventoryAdjustmentReasonId) 
    LEFT OUTER JOIN Item i on (i.Id = iai.ItemId) 
    LEFT OUTER JOIN ReportPriceLookup rpl on (rpl.SkuNumber = i.SkuNo) 
WHERE iar.StoreUse = 'yes' 
संबंधित मुद्दे