Ich brauche auch noch eine zweite Abfrage aufbauend auf der hier gefragten: Die Ansprechpartnerdaten (Tel, Fax) sollen mit allen Feldern der Kundentabelle in einer Abfrage zurückgegeben werden. Ich habe es mit den Lösungen von Jumpy und rapante probiert. Beide Abfragen habe ich nach 5 Minuten Laufzeit abgebrochen. Warum ist das so langsam? Wie gehts besser? Für sich laufen die Ansprechpartner-Abfragen schnell, aber sobald die mit den Kunden verbunden werden, extram langsam.
Der Code von Jumpy mit Kunden:
SQL-Code:
WITH BASIS AS (
-- Kunden mit Standard-Ansprechpartner
Select KdNr, max(id) as id
from Ansprechpartner
Where Standard=true
Group By KdNr
UNION
-- Kunden ohne Standard-Ansperchpartner
Select KdNr, max(id) as id
from Ansprechpartner
Where KdNr not in (Select Distinct KdNr From Ansprechpartner Where Standard=true)
Group By KdNr
)
select *
from Kunde k
left join (
Select A.KdNr, A.TelefonNr, A.FaxNr
From Basis B
Left Join Ansprechpartner A ON A.KdNr=B.KdNr AND A.ID=B.ID
) sub on sub.KdNr = k.KdNr
where k.aktiv
oder der Code von Rapante mit Kunden
SQL-Code:
WITH ap AS (
SELECT Ansprechpartner.KdNr,
Ansprechpartner.TelefonNr,
Ansprechpartner.FaxNr,
ROW_NUMBER() OVER(PARTITION BY Ansprechpartner.KdNr
ORDER BY standard DESC, id DESC) AS rk
FROM Ansprechpartner)
select *
from Kunde k
left join (
SELECT ap.*
FROM ap
WHERE ap.rk = 1
) sub on sub.KdNr = k.KdNr
where k.aktiv