J'essaye de joindre deux tables sur leur customerID. J'ai un tableau des informations client et un tableau des informations d'achat. Dans la table jointe, je souhaite qu'une colonne affiche les informations d'achat les plus récentes pour ce client. Cependant, certains clients n'ont pas encore effectué d'achat ... Je souhaite que ce champ reste vide ou nul. De plus, je souhaite uniquement afficher les achats de type A, pas les achats de type B.
J'ai trouvé une solution pour afficher le dernier enregistrement, mais je ne peux pas le faire afficher null si le client n'a pas d'enregistrement (cela supprime simplement ce client de la table de jointure complètement au lieu de laisser un champ nul ... peu importe de type de jointure):
SELECT c.*, p1.*
FROM customer c
JOIN purchase p1 ON (c.id = p1.customer_id)
LEFT OUTER JOIN purchase p2 ON (c.id = p2.customer_id AND
(p1.date < p2.date OR p1.date = p2.date AND p1.id < p2.id))
WHERE p2.id IS NULL and p2.purchase_Type = 'A';
Disons que mes champs sont: customerTable: customer_ID, customer_Name purchaseTable: customer_ID, purchase_Type (A ou B), purchase_Price, purchase_Notes.
Je veux que ma table de jointure affiche: customer_ID, Customer_Name, purchase_Price (le plus récent), purchase_Notes (le plus récent)
pour chaque client de ma table client, même s'il n'a pas effectué d'achat, et je souhaite que le purchasePrice et le purchaseNotes s'affichent uniquement pour les achats de type A, sinon le champ est laissé nul
Utilisez les fonctions de fenêtre ou apply
. Le dernier:
SELECT c.*, p.*
FROM customer c OUTER APPLY
(SELECT TOP (1) p.*
FROM purchase p
WHERE p.customer_id = c.id and p.type = 'A'
ORDER BY date DESC
) p;
Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.
En cas d'infraction, veuillez [email protected] Supprimer.
laisse moi dire quelques mots