我有一个包含站点id、站点名称和站点地址的表。我正试图写一个查询,将给我相同的网站名称具有不同的网站id的所有实例,我有一个困难的时间..
site_id site_name site_address
1 North Office 123 Test Rd.
2 Eastern 456 Fake St.
3 North Office 789 Data Ln.
4 West Office 111 Western Ave.
5 North Office 901 Delta Rd.
在我的场景中,我将寻找一个返回站点id 1,3和5的查询,因为id不同,但站点名称相同。
我没有得到很远的在我所尝试的,因为我有点迷路。我已经尝试将计数与HAVING和GROUP BY合并,但我一直得到错误..
SELECT site_id, site_name, site_address FROM table WHERE site_id IN (SELECT site_id FROM table WHERE...)
我似乎找不到SQL Server副本,然而,这实际上是与许多其他RDBMS相同的答案,并且非常类似的解决方案,例如获取每个组的前1行;使用CTE/派生表获取COUNT
,然后对其进行过滤:
WITH CTE AS(
SELECT SiteId,
SiteName,
COUNT(*) OVER (PARTITION BY SiteName) AS Sites
FROM dbo.YourTable)
SELECT SiteId,
SiteName
FROM CTE
WHERE Sites > 1;
,db<的在小提琴
你差点就成功了,可能在小组中失败了。下面是如何做到这一点的一个例子
SELECT site_id, site_name, site_address
FROM dbo.YourTable
WHERE site_name IN (SELECT site_name FROM dbo.YourTable
GROUP BY site_name
HAVING COUNT(DISTINCT site_id) > 1)