2010-09-13 22 views
5

मेरे पास एक चुनिंदा कथन है और मैं यह कहना चाहता हूं कि यह चयन कथन किसी भी पंक्ति को वापस नहीं करता है, फिर प्रत्येक सेल में '' 'डाल देता है। मैं यह कैसे करु?एसक्यूएल अगर कोई पंक्ति वापस नहीं आती है तो यह

+2

क्या हर सेल में? –

+0

क्या कभी भी सेल में एक '' रखो? एक एसएसआरएस रिपोर्ट? एक एक्सेल स्प्रेडशीट? –

+0

मेरे पास 2 इकाइयां हैं I 1 में डेटा है, और 1 नहीं है। मैं 1 यूनिट डेटा दिखाना चाहता हूं लेकिन केवल उन सभी अन्य इकाइयों के डेटा के लिए रिक्त स्थान दिखाएं जिनमें डेटा नहीं है। यदि इसका कोई मतलब निकले तो? – user380432

उत्तर

2

ऐसा लगता है कि आपको अभी भी उन सभी पंक्तियां नहीं मिल रही हैं जिन्हें आप चाहते हैं। सच? मुझे लगता है कि @ जो Sefanelli आपके समाधान के लिए एक महत्वपूर्ण हिस्सा प्रदान करता है, और फिर उल्लेख करता है कि आपको INNER को LEFT में शामिल करने की आवश्यकता है।

तो, आप कहते हैं कि आप अपनी इकाइयों की सूची में सभी इकाइयों को प्रदर्शित करना चाहते हैं। और, यदि किसी इकाई के लिए कोई डेटा नहीं है, तो उस डेटा के लिए यूनिट और रिक्त स्थान प्रदर्शित करें जो मौजूद नहीं है।

यहां एक संभावित समाधान है। आप इकाइयों कि @Units सूची में हैं की एक सूची मिल जाएगा इस बदलाव के साथ

FROM [dbo].[Unit] u 
LEFT OUTER JOIN 
    (
    SELECT * 
    FROM [dbo].[IUA] i 
    JOIN [dbo].[Reports] r ON r.[Report_ID] = i.[Report_ID] 
    JOIN [dbo].[State] s ON i.[St_ID] = s.[St_Id] 
    WHERE r.[Account] = [dbo].[fn_Get_PortalUser_AccountNumber](11-11) 
     AND r.[Rpt_Period] = '2126' 
     AND r.[RptName] = 'tfd' 
     AND r.[Type] = 'h'  
    ) ir ON ir.[Unit_ID] = u.[Unit_ID] 
LEFT JOIN [dbo].[UnitType] ut ON u.[UnitType] = ut.[UnitType] 
WHERE u.[Unit] IN (SELECT [VALUE] 
       FROM dbo.udf_GenerateVarcharTableFromStringList(@Units, ',')) 
; 

: निम्न के FROM खंड अपने बदलें। बाएं बाहरी जुड़ने में प्रत्येक इकाई से जुड़े डेटा शामिल होंगे, लेकिन यदि कोई संबंधित डेटा नहीं है तो इकाइयों को बाहर नहीं किया जाएगा।

+0

यह वास्तव में सभी रिपोर्ट अवधि देता है जो काम नहीं करेगा क्योंकि मैं केवल 2126 प्राप्त करने की कोशिश कर रहा हूं। विभिन्न रिपोर्ट अवधि में इकाई के लिए डेटा है लेकिन यह रिपोर्ट अवधि नहीं है। अगर मैं इसे इस खंड में ले जाता हूं तो यह फिर भी कोई पंक्ति नहीं देता है। – user380432

+0

ओह। जहां खंड के बारे में आपकी टिप्पणी गलत है। – bobs

+0

हाँ मुझे विश्वास है कि हम हैं लेकिन यह फिर से कुछ नहीं लौटाता है .... हमम। – user380432

4

इस प्रयास करें -

IF NOT EXISTS (SELECT 'x' FROM <TABLE> ....) 
BEGIN 
    -- Your logic goes here 
END 
+0

मुद्दा यह है कि मेरे पास 1 यूनिट हो सकती है जो डेटा और 1 इकाई दिखाती है जो डेटा नहीं दिखाती है, इस प्रकार यह केवल एक इकाई डेटा दिखाएगा, लेकिन मैं दोनों इकाइयों को दिखाना चाहता हूं .... – user380432

+0

@anicolais - आपकी दूसरी इकाई के लिए आप खाली डेटा दिखाना चाहते हैं, दस गुना से जवाब देखें। क्या इससे मदद मिलेगी? –

+0

ओपी – user380432

8
select a, b, c from t 
if @@rowcount = 0 
    select '' as a, '' as b, '' as c 

लेकिन यह समझने का '' कॉलम a, b, और c तुलना में एक अलग डेटाप्रकार हो सकता है बनाते हैं।

3

एक संघ

select x.JobName , x.Description 
from MasterJobList x 
where x.IsCycleJob = 1 

union all 

select "" , "" 
from MasterJobList x 
where not exists 
    (
    select 1 
    from MasterJobList x 
    where x.IsCycleJob = 1 
    ) 
1

पोस्ट कोड के आधार पर के नीचे स्थित अपने रिक्त पंक्ति चुनें रखो, मुझे लगता है कि तुम बाहर UnitType तालिका में कॉलम खाली करने के लिए देख रहे हैं के रूप में है कि केवल एक आप 'है फिर से शामिल हो जाओ। उस मामले में

ISNULL(ut.[Description], '') AS UnitType 
+0

में प्रारंभिक क्वेरी है, यह अभी भी मेरे लिए कोई पंक्ति नहीं देता है अगर मैं आपको बताता हूं। Number = 'e2499' यह सिर्फ कोई पंक्ति नहीं देता है। मुझे यूनिट नंबर देने के लिए इसकी आवश्यकता है लेकिन कोई डेटा नहीं। – user380432

+0

फिर आपके कुछ मौजूदा INNER जुड़ने के बजाय बाएं जुड़ने की आवश्यकता है, इस आधार पर कि आप किस तालिका में मिलान करने वाली पंक्ति नहीं ढूंढ रहे हैं। फिर उन कॉलम को खाली करने के मेरे उत्तर में ISNULL का उपयोग करें। –

+0

जिस तालिका में मैच पंक्ति नहीं है IUA है, इसलिए मुझे यकीन नहीं है कि मैं यहां क्या करूँगा क्योंकि अधिकांश ISNULL – user380432

0
select top 1 isnull(max(col2),' ') as noNullCol from table1 where col1='x' 

अधिकतम रिटर्न एक null पंक्तियों की जरूरत नहीं है, जहां उसके बाद isnull फ़ंक्शन ' ' बजाय एक null मूल्य

0

यहाँ एक उदाहरण मैं एक एकल स्तंभ के लिए उपयोग करते हैं - यह आसान है और केवल एक रिक्त पंक्ति का उत्पादन करता है, तो वहाँ कोई नहीं है डेटासेट में मेल खाता है।

select Company from customer where [email protected] 
union 
select '' where not exists (select 1 from customer where [email protected]) 

यह कोई मिलान नहीं होने पर रिक्त स्थान की एक पंक्ति बनाता है।

संबंधित मुद्दे