TSQL 不返回 DISTINCT 值
TSQL not returning DISTINCT Values
我正在尝试使用 DISTINCT 仅获取唯一的主键值,但无法弄清楚为什么 DISTINCT 不起作用。下面的 TSQL(使用 Windows Azure SQL 服务器)试图通过查看地址字段中的第一个数字值字符串来识别重复地址。它正确返回匹配项,但重复值太多。
SELECT DISTINCT a.Id AS DinstinctID
,b.Id AS LeftID
,LEFT(b.StreetAddress, CHARINDEX(' ', b.StreetAddress))
,LEFT(a.StreetAddress, CHARINDEX(' ', a.StreetAddress))
FROM [User] a
JOIN [User] b ON b.Id != a.Id AND
LEFT(a.StreetAddress,CHARINDEX(' ', a.StreetAddress)) =
LEFT(b.StreetAddress,CHARINDEX(' ', b.StreetAddress))
AND b.DateSubmitted >= DATEADD(day, -5, CONVERT(DATE, GETDATE()))
您可以尝试将字符串转换为二进制并以这种方式进行比较。将帮助您发现是否有任何隐藏字符导致连接标准不符合您的预期。
你不是很清楚
Distinct 基于所有列
Distinct 给出了正确答案
因为你有 b.Id != a.Id 所有行 returned 都是不同的
我想这就是您要找的
没有理由 return 两列中的相同地址
SELECT distinct a.Id AS DinstinctID
,LEFT(b.StreetAddress, CHARINDEX(' ', b.StreetAddress))
FROM [User] a
JOIN [User] b ON b.Id > a.Id
AND LEFT(a.StreetAddress,CHARINDEX(' ', a.StreetAddress)) =
LEFT(b.StreetAddress,CHARINDEX(' ', b.StreetAddress))
AND b.DateSubmitted >= DATEADD(day, -5, CONVERT(DATE, GETDATE()))
order by 2
我正在尝试使用 DISTINCT 仅获取唯一的主键值,但无法弄清楚为什么 DISTINCT 不起作用。下面的 TSQL(使用 Windows Azure SQL 服务器)试图通过查看地址字段中的第一个数字值字符串来识别重复地址。它正确返回匹配项,但重复值太多。
SELECT DISTINCT a.Id AS DinstinctID
,b.Id AS LeftID
,LEFT(b.StreetAddress, CHARINDEX(' ', b.StreetAddress))
,LEFT(a.StreetAddress, CHARINDEX(' ', a.StreetAddress))
FROM [User] a
JOIN [User] b ON b.Id != a.Id AND
LEFT(a.StreetAddress,CHARINDEX(' ', a.StreetAddress)) =
LEFT(b.StreetAddress,CHARINDEX(' ', b.StreetAddress))
AND b.DateSubmitted >= DATEADD(day, -5, CONVERT(DATE, GETDATE()))
您可以尝试将字符串转换为二进制并以这种方式进行比较。将帮助您发现是否有任何隐藏字符导致连接标准不符合您的预期。
你不是很清楚
Distinct 基于所有列
Distinct 给出了正确答案
因为你有 b.Id != a.Id 所有行 returned 都是不同的
我想这就是您要找的
没有理由 return 两列中的相同地址
SELECT distinct a.Id AS DinstinctID
,LEFT(b.StreetAddress, CHARINDEX(' ', b.StreetAddress))
FROM [User] a
JOIN [User] b ON b.Id > a.Id
AND LEFT(a.StreetAddress,CHARINDEX(' ', a.StreetAddress)) =
LEFT(b.StreetAddress,CHARINDEX(' ', b.StreetAddress))
AND b.DateSubmitted >= DATEADD(day, -5, CONVERT(DATE, GETDATE()))
order by 2