TSQL没有返回DISTINCT值

时间:2015-05-22 15:37:51

标签: sql-server tsql distinct

我试图仅使用DISTINCT获取唯一的主键值,但无法弄清楚为什么DISTINCT不起作用。下面的TSQL(使用Windows Azure SQL Server)试图通过查看地址字段中的第一个数字值字符串来识别重复的地址。它正确地返回匹配但只有太多的重复值。

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())) 

2 个答案:

答案 0 :(得分:0)

您可以尝试将字符串转换为二进制文件并进行比较。可以帮助您发现是否有任何隐藏字符导致连接条件无法按预期运行。

答案 1 :(得分:0)

你不是很清楚 区别在于所有列
明显的是给出了正确的答案 因为你有b.Id!= a.Id返回的所有行都是不同的 我认为这就是你要找的东西 没有理由在两列中返回相同的地址

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