区分大小写加入TSQL

Geo*_*Geo 4 t-sql sql-server join

我在这里有点停滞不前.我有一个简单的左外连接到一个返回ID的表.

我的代码是

Select distinct TenantID
,Name
,Name2
,TenantNumber
,Cashname 
From Tenants 
LEFT OUTER JOIN tCash 
on TenantNumber = CashNumber 
and tMoney.CashName = Tenants.Name2
Run Code Online (Sandbox Code Playgroud)

我的结果集如下:

**TenantID | Name      | Name2          | TenantNo | CashName**

100      |MyShop     | John's shop    | 12345    |John's shop

999      |MyShop     | John's Shop    | 12345    |John's shop
Run Code Online (Sandbox Code Playgroud)

我的问题: 出于所有意图和目的,"约翰的商店"与"约翰的商店"不同 - 我正在加入我的钱桌上TenantNo然后是Name2,但名字2与Case不同.

问题:有没有办法根据区分大小写来区分联接?我不想使用UPPERLOWER因为它会破坏报告的情况.

谢谢!

在下面添加表信息,请假设所有列都被修剪为空格.

tMoney

CashNumnbr |  CashName
102504       Bill's Place     

102374       Tom's Shop      

12345        John's Shop

12345        John's shop
Run Code Online (Sandbox Code Playgroud)

租户

   TenantID | Name     | Name2            |TenantNumber 

  1         |MyShop    | John's Shop     | 12345

  2         |MyShop    | John's shop     | 12345

  3         |Shoppee   |  Bill's Place   | 102504        

  4         | Shop2    | Toms Shop      | 102374        
Run Code Online (Sandbox Code Playgroud)

由于我想加入以获得AR报告的正确TenantID,我想确保我总是引入正确的租户.如果情况不同,我能写些什么来区分像John's Shop这样的情况吗?

Mar*_*ith 15

问题是,在你的结果的第二行中,"John's S hop"不应该匹配"John's s hop"?

您可以使用区分大小写的排序规则.

这可能最好通过更改所涉及的列的排序规则以允许索引使用来实现,但您也可以在运行时使用如下的显式COLLATE子句来完成此操作.

SELECT DISTINCT TenantID,
                Name,
                Name2,
                TenantNumber,
                Cashname
FROM   Tenants
       LEFT OUTER JOIN tCash
         ON TenantNumber = CashNumber
            AND tMoney.CashName = Tenants.Name2 COLLATE Latin1_General_100_CS_AS 
Run Code Online (Sandbox Code Playgroud)

关于加入id而不是名称的评论可能是正确的,并且根本不需要这样做.