Tsql 当联接列具有多个值时忽略列
我有一个表Orgs,其中包含以下数据:Tsql 当联接列具有多个值时忽略列,tsql,join,count,Tsql,Join,Count,我有一个表Orgs,其中包含以下数据: ID Name AddressID 0 McDonalds 4 1 Starbucks 5 2 Burger King 7 ID OrgID Address 3 0 123 Main St. 4 0 456 East Ave. 5 1 789 Young St. 6 2 5 Rive
ID Name AddressID
0 McDonalds 4
1 Starbucks 5
2 Burger King 7
ID OrgID Address
3 0 123 Main St.
4 0 456 East Ave.
5 1 789 Young St.
6 2 5 Riverside Dr.
7 2 8 Lakeview Ave.
我还有一个表Addresses,其中包含以下数据:
ID Name AddressID
0 McDonalds 4
1 Starbucks 5
2 Burger King 7
ID OrgID Address
3 0 123 Main St.
4 0 456 East Ave.
5 1 789 Young St.
6 2 5 Riverside Dr.
7 2 8 Lakeview Ave.
我需要创建一个select语句,从Orgs表中选择公司名称及其地址。组织表中的公司可以有一个或多个地址。如果该公司只有一个地址,我不想返回该公司的任何地址。如果公司有多个地址,我想返回Orgs.AddressID=Addresses.ID的地址
所以我的结果应该是这样的:
ID Name Address
0 McDonalds 456 East Ave.
1 Starbucks
2 Burger King 8 Lakeview Ave.
我不知道该怎么做。谢谢你的帮助 没有数据本身很难,但是像这样的东西
SELECT
O.ID, O.Name, A.Address
FROM
Orgs O
LEFT OUTER JOIN
(SELECT OrgID FROM Addresses GROUP BY OrgID HAVING COUNT(*) > 1) X ON O.ID = X.OrgID
LEFT OUTER JOIN
Addresses A ON X.OrgID = A.OrgID AND O.AddressID = A.ID
SELECT
orgs.OrgID
, orgs.Name
, CASE
WHEN OrgCount > 1 THEN ad.Address
ELSE ''
END AS Address
FROM
(
SELECT
OrgID
, Name
, COUNT(*) AS OrgCount
FROM
Orgs
) orgs
INNER JOIN
Addresses ad
ON
ad.AddressID = orgs.AddressID
GROUP BY
orgs.OrgID
, orgs.Name
, CASE
WHEN OrgCount > 1 THEN ad.Address
ELSE ''
END AS Address
我的标题应该是“当连接的列只有一个值时忽略列”。不确定是否可以更新我的标题。我想修复你的代码。您在O.Name后省略了逗号,但Stackoverflow不允许少于6个字符的更改。你能换一下吗?万分感谢@AndroidDev,当我试图在其他好的代码中修复1个字符的打字错误时,我遇到了这个问题!与DJ完全相同的解。但愿我能给你们两个打勾。再次感谢!