group by表达式必须包含一个不是外部引用的列

时间:2014-05-01 14:56:30

标签: sql sql-server group-by

有人请看一下吗?我试图总结我们所有skus的总重量,但我需要他们分组国外或国内。 SQL 2008服务器。

Select 
  IMSYS01.on_hand_qty * IMSYS01.piece_weight,
  IMSYS01.sku_no,
  case when(imsys01.warehouse = '109') then 'foreign' else 'domestic' end as 'vLocation'
From
  IMSYS01 IMSYS01
Where
  (IMSYS01.sku_no < '99999' And
  IMSYS01.velo_code <> 'X')
Group By
 IMSYS01.on_hand_qty * IMSYS01.piece_weight, 'vLocation', IMSYS01.sku_no

1 个答案:

答案 0 :(得分:0)

哦,可怕的单引号用于标识符。不要使用单引号作为标识符。这就是你想要的:

Select IMSYS01.on_hand_qty * IMSYS01.piece_weight,
       IMSYS01.sku_no,
       (case when(imsys01.warehouse = '109') then 'foreign' else 'domestic' end) as vLocation
From IMSYS01 IMSYS01
Where (IMSYS01.sku_no < '99999' And IMSYS01.velo_code <> 'X')
Group By IMSYS01.on_hand_qty * IMSYS01.piece_weight, 
         (case when(imsys01.warehouse = '109') then 'foreign' else 'domestic' end),
         IMSYS01.sku_no;

这是一个很好的例子,说明为什么永远不会使用单引号作为标识符。这会造成混乱。 SQL Server支持其他方法,但您甚至不需要转义vlocation。它本身就是一个很好的标识符。