[FIXED] Abrufen verwandter Tabellen enthält kein Ergebnis

Ausgabe

Ich habe eine DesignGroup-Tabelle als:

+--------------------------------------+----------+
|            DesignGroupId             |   Name   |
+--------------------------------------+----------+
| 3A81C1FF-442F-4291-B8E2-7079D80920CF | Design 1 |
| 3238F4C6-7BA7-4B3F-9383-17702B0D1CC3 | Design 2 |
+--------------------------------------+----------+

Jede DesignGroup kann mehrere Kunden haben, also habe ich eine Tabelle DesignGroupCustomers als:

+--------------------------------------+--------------------------------------+-------------+
|        DesignGroupCustomerId         |          DesignGroupId (FK)          | CustomerKey |
+--------------------------------------+--------------------------------------+-------------+
| D0828677-F295-46F7-BB85-65888D5A48B7 | 3A81C1FF-442F-4291-B8E2-7079D80920CF |          10 |
| 10C01BB9-1DDB-4DB4-BEC4-9539E030BF68 | 3A81C1FF-442F-4291-B8E2-7079D80920CF |          20 |
| F88C9F66-C0D9-EB11-8481-5CF9DDF6DC87 | 3238F4C6-7BA7-4B3F-9383-17702B0D1CC3 |          10 |
+--------------------------------------+--------------------------------------+-------------+

Jeder Kunde hat einen CustomerType als customerTable:

+-------------+-------------+
| CustomerKey | CustTypeKey |
+-------------+-------------+
|          10 |           2 |
|          20 |           1 |
+-------------+-------------+

Was ich erreichen möchte, ist nur diese Aussage zu bekommen:

gibt nur die DesignGroup zurück, die keinen Kunden mit custTypeKey = 1 hat

In diesem Fall sollte Design 2 zurückgegeben werden, da es keinen Kunden mit custTypeKey = 1 hat

Ich habe über die Verwendung von CTE nachgedacht, aber ich habe einfach keine Ahnung, wie ich das gewünschte Ergebnis erzielen soll:

;WITH CTE
    AS (SELECT
             [DG].[DesignGroupId]
            , ROW_NUMBER() OVER(PARTITION BY [DesignGroupCustomer]) AS [RN]
             FROM [DesignGroup] AS [DG]
                 INNER JOIN [DesignGroupCustomer] AS [DGC] ON [DG].[DesignGroupId] = [DGC].[DesignGroupId]
                 INNER JOIN [Customer] AS [C] ON [DGC].[CustomerKey] = [C].[CustomerKey]
                 INNER JOIN [CustomerType] AS [CT] ON [C].[CustTypeKey] = [CT].[CustTypeKey])
    SELECT
          [DesignGroupId]
          FROM [CTE] -- WHERE CustomerType NOT CONTAINS (1)

Lösung

WITH temp AS (
    SELECT DISTINCT
        dgc.DesignGroupId AS DesignGroupId
    FROM DesignGroupCustomers dgc
    INNER JOIN customerTable ct
        ON dgc.CustomerKey = ct.CustomerKey
    WHERE ct.CustTypeKey = 1
)
SELECT
    DesignGroupId
FROM DesignGroup
WHERE DesignGroupId NOT IN (
    SELECT
        DesignGroupId
    FROM temp
)

Zuerst können Sie alle Designgruppen mit CustTypeKey =1 abrufen und dann alle anderen Designgruppen mit NOT IN abrufen . Bitte teilen Sie mir mit, wenn Sie auf Probleme stoßen


Beantwortet von –
Prakhar Gupta


Antwort geprüft von –
Jay B. (FixError Admin)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like