Ant*_*ggs 2 sql t-sql sql-server
我试图在TSQL中返回结果,它只显示有多个名称的地址.棘手的部分是这个表中已经存在多个重复...所以我尝试过的Count Count变量不起作用,因为它们都有一个大于一的计数.所以我无法轻易区分具有相同地址的唯一名称.下面说明的解决方案就是我想要制作的...我有但我的解决方案是在Access中最后一次失败的努力,我最终使用了一个包含三个子查询的查询来获得结果:
Address Name
101 1st Ave Brian Wood
101 1st Ave Amy Wood
101 1st Ave Adam Wood
555 5th St Sarah Parker
555 5th St Parker Corp.
Run Code Online (Sandbox Code Playgroud)
示例数据看起来像这样:
Address Name
101 1st Ave Brian Wood
101 1st Ave Brian Wood
101 1st Ave Brian Wood
101 1st Ave Amy Wood
101 1st Ave Adam Wood
555 5th St Sarah Parker
555 5th St Sarah Parker
555 5th St Sarah Parker
555 5th St Parker Corp.
Run Code Online (Sandbox Code Playgroud)
我一直试图让这个好几个小时...我知道他们这是一个更简单的方法,但是因为这是一个16小时的一天,而且是凌晨2点,我只是无法理解它.
这是我最好的TSQL结果的一个例子......它可以解决这个问题,但它会把它变成两个不同的列:
SELECT DISTINCT t1.Name, t2.Name, t1.Address
FROM tblLeads t1
JOIN tblLeads t2 ON t1.Address = t2.Address
WHERE t1.Name <> t2.Name
ORDER BY t1.Address
Run Code Online (Sandbox Code Playgroud)
您可以GROUP使用COUNT(Distinct Name) > 1以获取具有多个唯一名称的地址,然后使用上述分组地址中的过滤器进行选择.
SELECT DISTINCT Address,Name
From Table1
WHERE Address IN (
SELECT Address
FROM Table1
GROUP BY Address
HAVING COUNT(distinct Name) > 1
)
Run Code Online (Sandbox Code Playgroud)
您可以使用多个CTE's来简化此任务.您首先要清理数据,因此请删除所有这些重复数据,因此您可以使用DISTINCT.然后Count(*)OVER(Partition By Address)用来获取每行的行数Address:
WITH CleanedData AS
(
SELECT DISTINCT Address, Name
FROM dbo.tblLeads
),
CTE AS
(
SELECT Address, Name,
cnt = Count(*) OVER (Partition By Address)
FROM CleanedData
)
SELECT Address, Name
FROM CTE
WHERE cnt > 1
Run Code Online (Sandbox Code Playgroud)
顺便说一下,如果Address有null值,这也有效:( Demo与此相反).
| 归档时间: |
|
| 查看次数: |
71 次 |
| 最近记录: |