【问题标题】:group by expression must contain one column that is not an outer referencegroup by 表达式必须包含一列不是外部引用
【发布时间】:2014-06-18 01:58:08
【问题描述】:

有人可以看看这个吗?我试图总结我们所有 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

【问题讨论】:

    标签: sql sql-server group-by


    【解决方案1】:

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

    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。它本身就是一个很好的标识符。

    【讨论】:

    • 谢谢。我认为这很简单!
    猜你喜欢
    • 2012-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-07
    相关资源
    最近更新 更多