2013-08-07 7 views
8

के साथ कथन है, तो मैं WHERE CASE WHEN कथन वाले SQL क्वेरी बना रहा हूं। मैं कुछ गलत कर रहा हूं और त्रुटि प्राप्त कर रहा हूं।जहां केस

मेरे SQL विवरण

तरह
DECLARE @AreaId INT = 2 
DECLARE @Areas Table(AreaId int) 

INSERT INTO @Areas SELECT AreaId 
FROM AreaMaster 
WHERE CityZoneId IN (SELECT CityZoneId FROM AreaMaster WHERE AreaId = @AreaID) 

SELECT * 
FROM dbo.CompanyMaster 
WHERE AreaId IN 
    (CASE WHEN EXISTS (SELECT BusinessId 
         FROM dbo.AreaSubscription 
         WHERE AreaSubscription.BusinessId = CompanyMaster.BusinessId) 
      THEN @AreaId 
      ELSE (SELECT [@Areas].AreaId FROM @Areas) 
     END) 

मैं

संदेश 512, स्तर 16, राज्य 1, रेखा 11
के रूप में त्रुटि हो रही है Subquery 1 से अधिक मान दिया है। यह अनुमति नहीं है जब subquery निम्न =,! =, <, < =,>,> = या जब subquery को अभिव्यक्ति के रूप में उपयोग किया जाता है।

कृपया सफलतापूर्वक क्वेरी चलाने में मदद करें। मेरा तर्क प्रत्येक पंक्ति के लिए सशर्त AreaId (कथन) में जांचना है।

मैं केवल जब

  1. कंपनी विशिष्ट क्षेत्र से @AreaId
  2. तालिका AreaSubscription पारित कर दिया सब्सक्रिप्शन प्रविष्टि नहीं है के लिए AreaSubscription में सदस्यता प्रविष्टि है तो (SELECT [@Areas].AreaId FROM @Areas)
+0

'चयन [@ एरिया] .एरिया से @ एरिया आईडी क्या यह कई मूल्यों को वापस कर रहा है? – Nithesh

+0

हां यह क्वेरी में पहले किए गए क्षेत्रों की सूची लौटाता है। –

+0

मुझे लगता है कि सबक्वायरी अपवाद है। '(SELECT BusinessId dbo.Area सदस्यता से जहां क्षेत्र सदस्यताएं। व्यवसाय Id = CompanyMaster.BusinessId) के परिणाम के बारे में क्या? कई? – Nithesh

उत्तर

14

यह आपको मदद मिल सकती है की कोशिश करो।

SELECT * FROM dbo.CompanyMaster 
WHERE AreaId= 
(CASE WHEN EXISTS (SELECT BusinessId 
        FROM dbo.AreaSubscription 
        WHERE AreaSubscription.BusinessId = CompanyMaster.BusinessId) 
     THEN @AreaId ELSE AreaId END) 
AND AreaId IN (SELECT [@Areas].AreaId FROM @Areas) 

एक और समाधान

SELECT * FROM dbo.CompanyMaster A 
LEFT JOIN @Areas B ON A.AreaId=B.AreaID 
WHERE A.AreaId= 
(CASE WHEN EXISTS (SELECT BusinessId 
        FROM dbo.AreaSubscription 
        WHERE AreaSubscription.BusinessId = CompanyMaster.BusinessId) 
     THEN @AreaId ELSE B.AreaId END) 
) 
+0

मैं प्रत्येक पंक्ति के लिए राज्य का मूल्यांकन करना चाहता हूं .. यह मेरे लिए काम नहीं करता है .... –

+0

क्या आप दूसरा एक – Nithesh

+0

गलत वाक्यविन्यास देख सकते हैं .. –

0
में AreaId का मूल्यांकन पंक्ति का चयन करना चाहते हैं

SELECT शीर्ष 1 [@Areas] डालने का प्रयास करें। अगर एरिया से यह समस्या हल हो जाती है ..

+0

मुझे एरियाआईडी (सभी क्षेत्रों) में जांच करने की ज़रूरत है, इसलिए मैं उस कथन में शीर्ष 1 भी नहीं डाल सकता .... –

0

इस

DECLARE @AreaId INT = 2 
DECLARE @Areas Table(AreaId int) 

INSERT INTO @Areas 
SELECT AreaId FROM AreaMaster 
WHERE CityZoneId IN (SELECT CityZoneId FROM AreaMaster WHERE AreaId = @AreaID) 

    IF EXISTS (SELECT BusinessId 
     FROM dbo.AreaSubscription 
     WHERE AreaSubscription.BusinessId = CompanyMaster.BusinessId) 
    BEGIN 
     SELECT * FROM dbo.CompanyMaster 
     WHERE AreaId IN (@AreaId) 
    END 
    ELSE 
    BEGIN 
     SELECT * FROM dbo.CompanyMaster 
     WHERE AreaId IN (SELECT [@Areas].AreaId FROM @Areas) 
    END 
+1

लॉल, बस वही काम किया .. .. आपके पास जवाब है – twoleggedhorse

+0

यह वह नहीं है जिसे मैं ढूंढ रहा हूं, कृपया सावधानीपूर्वक प्रश्न पढ़ें। –

+0

@HareshAmbaliyae अद्यतन एक – bvr

0

यह कोशिश है,

DECLARE @AreaId INT = 2 
    DECLARE @Areas Table(AreaId int) 

    INSERT INTO @Areas SELECT AreaId 
    FROM AreaMaster 
    WHERE CityZoneId IN (SELECT CityZoneId FROM AreaMaster WHERE AreaId = @AreaID) 

    INSERT INTO @Areas 
    SELECT AreaSubscription.BusinessId 
     FROM dbo.AreaSubscription INNER join CompanyMaster 
     ON AreaSubscription.BusinessId = CompanyMaster.BusinessId 

    SELECT * FROM dbo.CompanyMaster 
    WHERE AreaId IN (SELECT DISTINCT [@Areas].AreaId FROM @Areas) 
संबंधित मुद्दे