1

where句で基準として指定しない限り、必要な行を返さないSQLがいくつかあります。コメントアウトされている以下の部分のコメントを外すと、必要な行が表示されます。コメントアウトしたままにすると、それらの行は結果セットに返されません。

これは意味がありますか?誰かが私が間違っていることを見ることができますか?ありがとう。

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値に基づいて実行されます。したがって、よりも大きい数字で始まる値(または で始まり、2 番目の数字が よりも大きい値など) がある場合、その値が返されます。g.mega_location_num445MAX

これを修正するには、まず、Kuya が提案した ANSI 結合スタイルに切り替えます。ROW_NUMBER()次に、テーブルから「本物の」最大値を見つけ、gその最大行から複数​​の列を取得できるようにするための適切な式を含めることを検討します (文字列の作成を続行できるようにするため)。

于 2012-12-17T14:28:40.020 に答える