1

我有一些 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) 
4

1 回答 1

5

这个比较:

MAX(RTRIM(g.mega_location_num) + '-' + g.mega_location_name)

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

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

于 2012-12-17T14:28:40.020 回答