3

请帮助我应对这个挑战。

此代码返回空白结果,我无法找出原因。

在此处输入图像描述

select Vendor_Name + ' || ' + cast(cnt as varchar(12)) as Vendor_Count
from (select top (1) Vendor_Name, count(Vendor_Name) as cnt 
      from dbo.Vendors nolock 
      group by Vendor_Name 
      having count(Vendor_Name)>1 
      order by 2 desc) x 

但是...内部查询返回Vendor_Name 空白,并且 cnt 63420

在此处输入图像描述

select top (1) 
    Vendor_Name, count(Vendor_Name) as cnt 
from 
    dbo.Vendors nolock 
group by 
    Vendor_Name 
having 
    count(Vendor_Name) > 1 
order by 
    2 desc

这是没有顶部 (1) 的内部查询的结果。如您所见,空白/空/空 Vendor_Name 出现频率最高。

在此处输入图像描述

我使用 len() 函数检查 Vendor_name 的长度,它返回 12。但是当我将上面内部查询的结果复制到 Excel 工作表中,并在 Excel 中使用 len() 函数时 - excel 显示 0。声明的长度Vendor_nameSQL Server 表中的for是nvarchar(50).

我试过了isnull(Vendor_Name,'')COALESCE(Vendor_Name,'')但这并没有什么不同。

我重新安排了查询并得到了非空白结果,有趣的是这有效,但我的原始查询无效。

select ' || ' + cast(cnt as varchar(12)) + ' ' + Vendor_Name  
from (select top (1) Vendor_Name, count(Vendor_Name) as cnt 
      from dbo.Vendors nolock 
      group by Vendor_Name 
      having count(Vendor_Name)>1 
      order by 2 desc) x 

但这个结果不是我想要的。

我错过了什么?

谢谢!

附言。我试图将数据复制到此处发布,但没有成功。

4

1 回答 1

6

这是一个真正的谜题!

我怀疑 Vendor_Name 可能以NUL( '\0') 字符开头,表示字符串结束。这将使它看起来没有内容并解释连接顺序的差异。

要对此进行测试,请REPLACE(Vendor_Name, CHAR(0), ' ')在您的外部查询中尝试

于 2013-06-02T19:09:50.123 回答