सुनिश्चित नहीं है कि मैं अपने CASE कथन में कहां गलत हो रहा हूं। मैं अपने WHERE क्लॉज में एक फिल्टर बनाने की कोशिश कर रहा हूं, जो केवल उपयोगकर्ता द्वारा चुने गए प्लेटफॉर्म के आधार पर उत्पादों को दिखाने के लिए है। मैंने थोड़ी देर के लिए इसके साथ खेला है और बहुत सारे उदाहरणों को गुगल किया है, कुछ भी करीब नहीं लग रहा था। मुझे यकीन है कि यह कुछ आसान है जो मुझे याद आ रही है। इसे इंगित करने के लिए आंखों की ताजा जोड़ी चाहिए। मैं इस बीच खुदाई करता रहूंगा।

    @Platform AS INT,
    @Type AS INT
AS
BEGIN
    SELECT 
        [Product_Name],
        [Product_Description],
        [Product_Release],
        [Product_Image],
        [Windows_PC],
        [Linux],
        [Mac],
        [Android],
        [Fire_TV],
        [Amazon_App_Store],
        [Google_Play_Store],
        [X_Box],
        [Switch],
        [Playstation],
        [Link_Game_Play],
        [Link_Twitter],
        [Link_Download],
        [Link_Web],
        [Available_Now],
        [New_Release],
        [Coming_Soon],
        [Open_Beta]
    FROM
        [White_Box_Gaming].[dbo].[WBG_Product_Profile]
    WHERE
        CASE 
            WHEN @Platform = 1 THEN [Windows_PC] = 1
            WHEN @Platform = 2 THEN [Mac] = 1
            WHEN @Platform = 3 THEN [Linux] = 1
            WHEN @Platform = 4 THEN [Android] = 1
            ELSE [Windows_PC] = 1

त्रुटि:

संदेश 102, स्तर 15, राज्य 1, प्रक्रिया Select_Portal_Games, पंक्ति 37
'=' के पास गलत सिंटैक्स।

मुझे पता है कि मेरे पास एक वाक्यविन्यास मुद्दा है। मैं WHERE क्लॉज में कुछ सही फॉर्मेट नहीं कर रहा हूं।

0
mholmes 2 सितंबर 2021, 19:38

2 जवाब

सबसे बढ़िया उत्तर

बस सरल तर्क का प्रयोग करें:

WHERE (@Platform = 1 AND [Windows_PC] = 1) OR
      (@Platform = 2 AND [Mac] = 1) OR
      (@Platform = 3 AND [Linux] = 1) OR
      (@Platform = 4 AND [Android] = 1) OR
      (@Platform NOT IN (1, 2, 3, 4) AND [Windows_PC] = 1)
2
Gordon Linoff 2 सितंबर 2021, 19:40

CASE एक अभिव्यक्ति है जो परिणाम उत्पन्न करता है। कौन सा कोड चलाना है यह चुनने के लिए यह केवल एक if ब्लॉक नहीं है। तो इसके बजाय, आपको ऐसा कुछ करने की ज़रूरत है:

WHERE 1 = 
    CASE WHEN @Platform = 2 THEN [Mac] 
        WHEN @Platform = 3 THEN [Linux] 
        WHEN @Platform = 4 THEN [Android]
    ELSE 
        [Windows_PC]
    END
2
Joel Coehoorn 2 सितंबर 2021, 19:48