【发布时间】:2020-10-07 16:25:36
【问题描述】:
我有下表
AccountID Name
1 Foo Bar
2 Jon Dow
AccountID AddressLine City
1 123 Test RD New York
1 456 Test RD New York
2 Lombard Street San Francisco
2 Lombard Street San Francisco
对于给定的 AccountID,我想选择 AddressLine 和 City。
如果帐户具有相同的AddressLine,则应选择该 AddressLine 值,否则返回“多个”。
如果帐户具有相同的City,则应选择该城市值,否则返回“多个”。
例如,对于帐户 ID 1,查询应该返回
AccountID AddressLine City
1 Multiple New York
这里是SQLFiddle
以下是我的查询(不工作)。我认为问题是从子查询中分组和选择计数
SELECT
A.AccountID,
CASE
WHEN T1.CNT = 1
THEN T1.AddressLine
ELSE 'Multiple'
END AS 'Address Line',
CASE WHEN T2.CNT = 1
THEN T2.City
ELSE 'Multiple'
END AS 'City'
FROM Accounts A
INNER JOIN
(
SELECT
ad.AccountID,
COUNT(DISTINCT(ad.AccountID)) AS CNT,
ad.AddressLine
FROM Addresses ad
GROUP BY ad.AccountID, ad.AddressLine
) T1 ON T1.AccountID = A.AccountID
INNER JOIN
(
SELECT
ad.AccountID,
COUNT(DISTINCT(ad.AccountID)) AS CNT,
ad.City
FROM Addresses ad
GROUP BY ad.AccountID, ad.City
) T2
ON T2.AccountID = A.AccountID
WHERE
a.AccountID = 1
【问题讨论】:
标签: sql-server tsql sql-server-2012 sql-server-2017