请帮我解决这个挑战。
此代码返回空白结果,我无法找出原因。
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
这是没有top(1)的内部查询的结果。如您所见,blank / empty / null Vendor_Name最常出现。
我使用len()函数检查Vendor_name的长度,然后返回12.但是当我将上面的内部查询的结果复制到Excel工作表,并在Excel中使用len()函数时 - excel显示0。 SQL Server表中Vendor_name
的声明长度为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
但这个结果不是我想要的。
我错过了什么吗?
谢谢!
PS。 我试图复制数据到这里发布但没有成功。
答案 0 :(得分:6)
这是一个真正的难题!
我怀疑Vendor_Name可能以NUL
('\0'
)字符开头,表示字符串结束。这将使似乎没有内容并解释连接顺序的差异。
要对此进行测试,请在外部查询中尝试REPLACE(Vendor_Name, CHAR(0), ' ')