我必须将卖家和客户放在一列中输出,显示他们的城市和类型。
我的问题是:我不需要输出城市不在卖家表中的客户,反之亦然。
SELECT
ContactName, City, Type
FROM
(SELECT
'Seller' AS Type,
ContactName, City
FROM
[dbo].[Suppliers] t
GROUP BY
City, ContactName
UNION
SELECT
'Customer',
ContactName, City
FROM
[dbo].[Customers] t
GROUP BY
City, ContactName) t
GROUP BY
ContactName, City, Type
结果 :
| Ivan Ivanov | Seller | Moscow |
| Piotr Petrov | Seller | Moscow |
| Ivan Romanov | Customer | Moscow |
| Johnny Bravo | Customer | London |
(假设伦敦没有卖家,因此该栏不应该存在)
预期结果:仅包含按联系人姓名和城市分组的城市至少有一个卖家和一个客户的信息的列
这似乎是union all
和exists
:
SELECT DISTINCT c.ContactName, 'Customer' as type, c.City
FROM Customers c
WHERE EXISTS (SELECT 1 FROM Sellers s WHERE s.city = c.city)
UNION ALL
SELECT DISTINCT s.ContactName, 'Seller' as type, s.City
FROM Sellers s
WHERE EXISTS (SELECT 1 FROM Customers c WHERE c.city = s.city);
我不确定SELECT DISTINCT
是否真的需要 - 我不明白为什么基础表会有重复(尽管ContactName
对于唯一标识来说并不是一个很好的列)。但是,您的原始查询具有GROUP BY
,这表明您要消除重复项。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句