ben SqlServer aşağıdaki 3 tablolar düşünün katılmak:En yeni rekor
Customer (CustomerID, FirstName, LastName)
Address (AddressID, CustomerID, Line1, City, State)
Product (ProductID, CustomerID, Description)
Bir müşterinin birden fazla teslimat adreslerini ve mulitple ürünler olabilir.
Yapmak istediğim, Devletin en son Adres kaydı tarafından belirlendiği her bir Devlet için müşteri sayısını listelemektir. "Her bir eyalette kaç müşteriye son ürün alındı?" Gibi. Bu nedenle, Müşteri için önceki herhangi bir adres kaydıyla ilgilenmiyorum, sadece en son (AddressID tarafından belirlenir). Müşteri Müşteri yalnızca en son adres kaydının Devlette sayılır birden Adresleri olabileceğinden, Ancak
SELECT a.State, count(c.CustomerID)
FROM Product p
INNER JOIN Customer c ON c.CustomerID = p.CustomerID
LEFT JOIN Address a ON a.CustomerID = c.CustomerID
WHERE p.ProductID = 101
GROUP BY a.State
:
State | Number of Customers
--------------------------
CA | 32
GA | 12
TX | 0
OH | 18
Normalde böyle bir şey yapsın?
P.S. Yukarıdaki, elde etmeye çalıştığım birleşimleri kolayca açıklamak ve gerçek bir sistem tasarımını yansıtmamak için sadece bir örnek senaryodur.
SELECT state, count(customer_id)
FROM (
SELECT
p.customer_id
, (SELECT TOP 1 State FROM Address WHERE Address.CustomerID = p.CustomerID ORDER BY Address.ID DESC) state
FROM Product p
WHERE p.ProductID = 101)
GROUP BY state
Sadece aradığım şey, çok teşekkürler. –
Harika! şimdi, neden bunu düşünmedim? –
Bu temizdi. Sana şükürler olsun. –