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

Sql group by表达式必须包含一个非外部引用的列,sql,sql-server,group-by,Sql,Sql Server,Group By,谁能看看这个吗?我试图计算我们所有SKU的总重量,但我需要将它们按国外或国内进行分组。sql2008server 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 (

谁能看看这个吗?我试图计算我们所有SKU的总重量,但我需要将它们按国外或国内进行分组。sql2008server

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
选择
IMSYS01.现有数量*IMSYS01.件重,
IMSYS01.sku_编号,
当(imsys01.warehouse='109')然后“国外”或“国内”结束为“vLocation”时的情况
从…起
IMSYS01 IMSYS01
哪里
(IMSYS01.sku编号<'99999'和
IMSYS01.velo_代码“X”)
分组
IMSYS01.现有数量*IMSYS01.件重,“位置”,IMSYS01.sku编号

噢,可怕的是,在标识符中使用单引号。不要对标识符使用单引号。这就是你想要的:

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;
选择IMSYS01.现有数量*IMSYS01.件重,
IMSYS01.sku_编号,
(当(imsys01.warehouse='109')然后是'foreign'或'local'结束时的情况)作为位置
来自IMSYS01 IMSYS01
其中(IMSYS01.sku编号<'99999'和IMSYS01.velo_代码'X')
按IMSYS01.现有数量*IMSYS01.件重分组,
(当(imsys01.warehouse='109')然后是“国外”或“国内”结束时的情况),
IMSYS01.sku_编号;

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

谢谢。我觉得这很简单!