只有当我在where子句中指定条件时,tsql才会返回正确的答案

Cod*_*url 1 sql t-sql sql-server-2005

我有一些sql不会返回我需要的行,除非我将其指定为where子句中的条件.如果我取消注释下面注释掉的部分,它会给我我想要的行.如果我将其注释掉,那么这些行不会在我的结果集中返回.

这有意义吗?任何人都可以看到我做错了吗?谢谢.

SELECT     
   RTRIM(c.comp2) + '-' + l.Loc_Name, 
   MAX(RTRIM(g.mega_location_num) + '-' + g.mega_location_name) 
FROM       
   mkt_share_comp c, gldm_location g, mkt_share_locs l 
WHERE     
   RTRIM(c.comp1) = g.location_num
   AND c.comp2 = l.Loc_No
   AND LEN(c.comp2) = 5 AND c.is_deleted = 0 AND l.is_deleted = 0
   --and  g.mega_location_num = '450'
GROUP BY
   RTRIM(c.comp2) + '-' + l.Loc_Name
ORDER BY
   MAX(RTRIM(g.mega_location_num) + '-' + g.mega_location_name) 
Run Code Online (Sandbox Code Playgroud)

Dam*_*ver 5

这个比较:

MAX(RTRIM(g.mega_location_num) + '-' + g.mega_location_name)
Run Code Online (Sandbox Code Playgroud)

MAX根据您正在构建的字符串值执行操作.因此,如果有任何g.mega_location_num以大于4(或4以第二个数字大于5等数字开头)的数字开头的值,那么该值将是MAX返回的值.

要开始解决这个问题,我首先会切换到Kuya 建议的ANSI连接样式.然后我会考虑包含一个适当的ROW_NUMBER()表达式来从g表中找到"真正的"最大值,并能够从该最大行检索多个列(以允许字符串构造继续)