2011-09-27 97 views
3
CustID  Name   ReferredBy 
1   Neeta Sayam 
2   Dolly Dilly   1 
3   Meena Kimi   2 

查找其他人介紹的所有客戶的姓名。自己加入表格

輸出應該是dolly dilly和meena kimi。

我已成功發現了誰已經通過查詢

SELECT c1.name FROM Customer c1 JOIN Customer c2 ON c1.custid=c2. ReferredBy 
+0

請澄清你的預期輸出。 – JNK

回答

6

reffred人除非我失去了一些東西的客戶:

SELECT * 
FROM Customer 
WHERE ReferredBy IS NOT NULL 
+0

我認爲OP的意思是創建'CustID'和'ReferredBy'之間的關係。 – 2011-09-28 00:51:08

+0

@ Surfer513 - 這不是他所說的,這與他的理想輸出相符。 – JNK

1

有很多的方式來實現你想要什麼,但有趣的是使用CTE,因爲它允許您按級別獲取參考,例如在您的案例級別零將是Neeta syam,沒有參考,一級是dolly dillymeena kimi。下面的查詢將返回dolly dillymeena kimi這是一個由where reference = 1像這樣指定的級別:

WITH CTEs (Id, CustomerName, Reference, RefCustomer) 
AS 
(
    SELECT 
    Id, 
    Name, 
    0 As Reference, 
    CONVERT(VARCHAR(length), 'No Reference') AS RefCustomer 
    FROM Customers 
    WHERE ReferredBy IS NULL 
    UNION ALL 
    SELECT 
    c.CustId, 
    c.Name, 
    cs.Reference + 1, 
    cs.CustomerName 
    FROM Customers c 
    INNER JOIN Ctes cs ON c.ReferedBy = cs.Id 
) 
SELECT CustomerName, RefCustomer 
FROM Ctes 
WHERE Reference = 1; 
+0

由於您正在'NAME'上加入'',因此不會按照書面方式工作,這不是關係中所使用的。我認爲它應該是'INNER JOIN Ctes cs ON c.ReferedBy = cs.Id' – JNK

+0

cs.CustomerName在Union all部分中被選爲RefCustomer –

+0

您是對的。我會說運行它對一個'#temp'表來測試它 – JNK