Je suis un peu arrêté ici. J'ai une simple jointure externe gauche à une table qui returnne un ID.
Mon code est comme
Select distinct TenantID ,Name ,Name2 ,TenantNumber ,Cashname From Tenants LEFT OUTER JOIN tCash on TenantNumber = CashNumber and tMoney.CashName = Tenants.Name2
Mon jeu de résultats est le suivant:
**TenantID | Name | Name2 | TenantNo | CashName** 100 |MyShop | John's shop | 12345 |John's shop 999 |MyShop | John's Shop | 12345 |John's shop
Mon problème: à toutes fins utiles, "John's shop" est différent de "John's Shop" – Je suis en train de join ma table sur le TenantNo, puis sur Name2, mais le nom 2 est différent par Case.
Question : existe-t-il un moyen de différencier une jointure en fonction de la casse? Je ne voudrais pas utiliser UPPER
ou LOWER
raison du fait que cela ruinerait le cas sur les rapports.
Merci!
En ajoutant des informations sur la table ci-dessous, veuillez supposer que toutes les colonnes sont coupées d'espaces.
tMoney
CashNumnbr | CashName 102504 Bill's Place 102374 Tom's Shop 12345 John's Shop 12345 John's shop
Locataires
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
Puisque je veux joindre pour get le TenantID correct pour un rapport d'AR, je voudrais m'assurer que j'amène toujours le locataire correct. Si le cas est différent, y a-t-il quelque chose que je puisse écrire pour différencier une situation comme celle de John?
Le problème est que dans la deuxième rangée de vos résultats "John's S hop" n'aurait pas dû correspondre à "John's s hop"?
Vous pouvez utiliser un classment sensible à la casse.
Cela est probablement mieux réalisé en modifiant le classment des colonnes impliquées pour permettre l'utilisation de l'index, mais vous pouvez également le faire au moment de l'exécution avec une clause COLLATE
explicite comme ci-dessous.
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
Les commentaires sur la participation sur id au lieu du nom sont probablement correctes et annuleraient la nécessité de le faire du tout.