SQL 比较列值不排除过滤器中的相等值

SQL Comparison of column values not excluding equal values from filter

SELECT 
    DISTINCT
    isnull(dbo.fnRemovePatternFromString(p.Last_Name, '%[,-.'']%'), '')  as [Last]
    ,isnull(dbo.fnRemovePatternFromString(p.First_Name, '%[,-.'']%'), '') as [First]
    ,isnull(upper(fm.ANS_TEXT), '') as [Faculty]
    ,isnull(upper((select fs.ANS_TEXT from dbo.ADD_ANSW fs where fs.ID = p.id and ques_id = 3)),'') as [Billing]

FROM person p
inner JOIN person_facilities pf ON p.ID = pf.ID
LEFT JOIN usr_FacultyMember fm ON p.ID = fm.id
LEFT JOIN dbo.ADD_ANSW fs ON p.ID = fs.id and QUES_ID = 3 or QUES_ID = 71

WHERE 
    pf.Current_status in ('Active')
    and  (UPPER(fm.ANS_TEXT) <> UPPER(fs.ANS_TEXT)); **this compare not working

我希望结果能够排除在 Faculty 和 Billing 列中具有相同值的结果。但结果仍然是这样的:

Last      First Faculty Billing
Skywalker Luke  NON-MFG NON-MFG

我在网上找不到关于此的任何信息。有什么想法为什么不排除那些都是非 MFG 的吗?看原文的话,一个是NON-Mfg,一个是NON-MFG,但是用大写的应该比较排除。

**更新: 我在 <> not always being round trip, so it can't compare correctly... LOWER(x) != LOWER(UPPER(x)). It was suggested to use collate, so I'm trying to find a good example. I'm having trouble applying this example of collate.

上找到了一些信息

显然您的数据库区分大小写。 要忽略这些列的区分大小写,请在每个列之后添加 COLLATE SQL_Latin1_General_CP1_CI_AS:

SELECT 
 DISTINCT
 isnull(dbo.fnRemovePatternFromString(p.Last_Name, '%[,-.'']%'), '')  as [Last]
,isnull(dbo.fnRemovePatternFromString(p.First_Name, '%[,-.'']%'), '') as [First]
,isnull(upper(fm.ANS_TEXT), '') as [Faculty]
,isnull(upper((select fs.ANS_TEXT from dbo.ADD_ANSW fs where fs.ID = p.id and ques_id = 3)),'') as [Billing]

FROM person p
 inner JOIN person_facilities pf ON p.ID = pf.ID
 LEFT JOIN usr_FacultyMember fm ON p.ID = fm.id
 LEFT JOIN dbo.ADD_ANSW fs ON p.ID = fs.id and QUES_ID = 3 or QUES_ID = 71

WHERE 
 pf.Current_status in ('Active')
 and fm.ANS_TEXT COLLATE SQL_Latin1_General_CP1_CI_AS  <> fs.ANS_TEXT COLLATE SQL_Latin1_General_CP1_CI_AS;

决定在 crystal 报告中使用视图处理比较,而不是直接在 sql 表达式中处理视图。

Collat​​e 没有像其他答案中建议的那样工作,并且正如所讨论的那样,<> 没有工作,并且 != 在 upper(x) 比较中没有工作。