SQL Server字符串连接返回空白

To *_* Do 2 t-sql sql-server

请帮我解决这个挑战.

此代码返回一个空白结果,我无法弄清楚原因.

在此输入图像描述

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 
Run Code Online (Sandbox Code Playgroud)

但是......内部查询返回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
Run Code Online (Sandbox Code Playgroud)

这是没有top(1)的内部查询的结果.如您所见,blank/empty/null Vendor_Name最常出现.

在此输入图像描述

我使用len()函数检查Vendor_name的长度,它返回12.但是当我将上面的内部查询的结果复制到Excel工作表,并在Excel中使用len()函数时 - excel显示0.声明的长度因为Vendor_name在SQL Server表中是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 
Run Code Online (Sandbox Code Playgroud)

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

我错过了什么?

谢谢!

PS.我试图复制数据到这里发布但没有成功.

Ste*_*ers 6

这是一个真正的难题!

我怀疑Vendor_Name可能以指示字符串结尾的NUL('\0')字符开头.这将使它似乎没有内容并解释连接顺序的差异.

要测试这一点,请尝试REPLACE(Vendor_Name, CHAR(0), ' ')外部查询