2017-12-23 14 views
1

Ich möchte überprüfen, ob der Kunde ein bestimmtes Produkt hat. Wenn sie es tun, gib ja zurück. Wenn sie dies nicht tun, geben Sie nein zurück.SQL-Abfrage mit Case-Anweisung

Also schrieb ich eine Abfrage, die das zurückgibt. Ich möchte jedoch nicht den Namen ProductFamily eingeben. Ich möchte mich verbinden.

SELECT 
    ID, 
    (CASE 
     WHEN ProductFamily IN ('Product') 
      THEN 'Yes' 
      ELSE 'No' 
    END) AS 'O' 
FROM 
    [source].[Opportunity] A 

Die folgende Abfrage lässt mich wissen, ob die ProductFamily Mapping:

SELECT * 
FROM [reference].[ProductFamilyMapping] 
WHERE (isA = 1) 
ORDER BY productfamilyname 

Wie inter Sie eine Case-Anweisung anschließen?

+0

Können Sie den Beitrag bearbeiten und einige Beispieleingabe Einträge sowie die gewünschte Ausgabeformat hinzufügen? – Vashi

Antwort

1

Sie können eine Unterabfrage in der IN-Anweisung anstelle von fest codiertem Text einfügen, obwohl Sie den Spaltennamen angeben müssen (z. B. "SELECT mycolumn" anstatt "SELECT *").

SELECT 
    ID 
    ,(CASE 
     WHEN ProductFamily IN 
     (SELECT ProductFamily FROM [reference].[ProductFamilyMapping] where (isA = 1)) 
      THEN 'Yes' 
     ELSE 'No' END) as 'O' 
From [source].[Opportunity] A 

(Ich gehe davon aus den Spaltennamen in [Referenz]. [ProductFamilyMapping] wird auch ProductFamily).

1

Eine Alternative könnte CTE und LEFT JOIN verwenden. Versuchen Sie folgendes:

WITH PFM AS (
    SELECT DISTINCT ProductFamily FROM [reference].[ProductFamilyMapping] where (isA = 1) 
) 
SELECT 
    ID 
    ,CASE WHEN PFM.ProductFamily IS NULL THEN 'No' ELSE 'Yes' END AS 'O' 
From [source].[Opportunity] A 
LEFT JOIN PFM ON A.ProductFamily = PFM.ProductFamily