我使用SQL Server 2008中我有兩個表:創建SQL查詢,向客戶展示和他們接觸
客戶
CREATE TABLE Clients
(
Id int primary key,
Name varchar(20),
ParentId int
);
INSERT INTO Clients(Id, Name, ParentId) VALUES (1, 'A', 1);
INSERT INTO Clients(Id, Name, ParentId) VALUES (2, 'B', 2);
INSERT INTO Clients(Id, Name, ParentId) VALUES (3, 'AA', 1);
INSERT INTO Clients(Id, Name, ParentId) VALUES (4, 'BB', 2);
INSERT INTO Clients(Id, Name, ParentId) VALUES (5, 'C', 1);
此表包含了所有客戶的信息,一些他們有母公司/客戶和ParentId顯示它。如果它與Id相匹配,則意味着這些客戶是層次結構中的頂級公司。
聯繫
CREATE TABLE Contacts
(
Id int primary key,
Name varchar(20),
Email varchar(20),
ClientId int
);
INSERT INTO Contacts(Id, Name, Email, ClientId) VALUES (1, 'Bob', '[email protected]', 1);
INSERT INTO Contacts(Id, Name, Email, ClientId) VALUES (2, 'John', '[email protected]', 1);
INSERT INTO Contacts(Id, Name, Email, ClientId) VALUES (3, 'Charlie', '[email protected]', 2);
INSERT INTO Contacts(Id, Name, Email, ClientId) VALUES (4, 'Peter', '[email protected]', 3);
INSERT INTO Contacts(Id, Name, Email, ClientId) VALUES (5, 'Chris', '[email protected]', 3);
INSERT INTO Contacts(Id, Name, Email, ClientId) VALUES (6, 'Neil', '[email protected]', 4);
INSERT INTO Contacts(Id, Name, Email, ClientId) VALUES (7, 'Grant', '[email protected]', 5);
INSERT INTO Contacts(Id, Name, Email, ClientId) VALUES (8, 'Cher', '[email protected]', 5);
此表包含了所有與特定客戶端觸點(ClientId
顯示它)。
我需要一個包含客戶端和特定客戶端的所有聯繫人以及他的母公司的所有聯繫人的列表。
例如
ClientName | ContactName | ContactEmail
AA | |
| Bob | [email protected]
| John | [email protected]
| Peter | [email protected]
| Chris | [email protected]
C | |
| Grant | [email protected]
| Cher | [email protected]
我好不容易寫一個SQL查詢其給出的結果只是一個客戶端,但我希望它返回一個以上的客戶端。向客戶展示(第三和第五)以及他們的聯繫方式。
SELECT
C.Name, ' ', ' '
FROM
Clients C
WHERE
C.Id = 3
UNION ALL
SELECT
' ', Co.Name, Co.Email
FROM
Contacts Co
WHERE
ClientId = 3 OR (ClientId = (SELECT ParentId FROM Clients WHERE Id = 3))
爲什麼你需要的數據有確切的格式? – mxix 2014-10-17 09:24:38
小孩可以有小孩嗎?什麼是層次結構的深度? – Sameer 2014-10-17 09:27:50
因爲這種請求來自用戶:) – 2014-10-17 13:13:43