我不明白为什么 "it is not contained in either an aggregate function or the GROUP BY clause." 错误

I dont understand why "it is not contained in either an aggregate function or the GROUP BY clause." error

查询;

SELECT  ch.CharID,ch.CharName16, it.OptLevel, obj.ReqLevel1, item.ItemClass  
FROM _Items as it            
LEFT JOIN [dbo].[_Inventory] as inv ON it.ID64 = inv.ItemID   
LEFT JOIN [dbo].[_Char] as ch ON inv.CharID = ch.CharID           
LEFT JOIN [dbo].[_RefObjCommon] as obj ON it.RefItemID = obj.ID           
LEFT JOIN [dbo].[_RefObjItem] as item ON obj.Link = item.ID           
LEFT JOIN [dbo].[_BindingOptionWithItem] as adv ON it.ID64 = adv.nItemDBID            
     WHERE ch.CharName16 IS NOT NULL 
       AND CodeName128 NOT LIKE '%stone%' 
       AND CharName16 NOT LIKE '%]%'
       AND inv.Slot < 7           

查询工作正常,但是 ;

INSERT INTO ItemPoints (
     CharID
    , CharName16
    , OptLevel
    , ReqLevel1
    , ItemClass
    , TotalPoint
    )
SELECT  CharID
    , CharName16
    , SUM(OptLevel) AS OptLevel
    , SUM(ReqLevel1) AS ReqLevel1
    , SUM(ItemClass) AS ItemClass
    , SUM(OptLevel) + SUM(ReqLevel1) + SUM(ItemClass) AS TotalPoint
FROM (
    SELECT  ch.CharID, ch.CharName16, it.OptLevel, obj.ReqLevel1, item.ItemClass  
      FROM _Items as it            
      LEFT JOIN [dbo].[_Inventory] as inv ON it.ID64 = inv.ItemID   
      LEFT JOIN [dbo].[_Char] as ch ON inv.CharID = ch.CharID           
      LEFT JOIN [dbo].[_RefObjCommon] as obj ON it.RefItemID = obj.ID           
      LEFT JOIN [dbo].[_RefObjItem] as item ON obj.Link = item.ID           
      LEFT JOIN [dbo].[_BindingOptionWithItem] as adv ON it.ID64 = adv.nItemDBID            
     WHERE ch.CharName16 IS NOT NULL 
       AND CodeName128 NOT LIKE '%stone%' 
       AND inv.Slot < 7           
   ) tbl
GROUP BY CharName16

但是 sql 服务器给出了这个错误;

Column 'tbl.CharID' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

我不明白这个错误,我该如何解决?

使用..

GROUP BY CharID,CharName16

然后尝试。

    INSERT INTO ItemPoints (
         CharID
        , CharName16
        , OptLevel
        , ReqLevel1
        , ItemClass
        , TotalPoint
        ) SELECT  ch.CharID, ch.CharName16, SUM(it.OptLevel), SUM(obj.ReqLevel1), SUM(item.ItemClass),
(SUM(it.OptLevel)+ SUM(obj.ReqLevel1) + SUM(item.ItemClass) ) total
          FROM _Items as it            
          LEFT JOIN [dbo].[_Inventory] as inv ON it.ID64 = inv.ItemID   
          LEFT JOIN [dbo].[_Char] as ch ON inv.CharID = ch.CharID           
          LEFT JOIN [dbo].[_RefObjCommon] as obj ON it.RefItemID = obj.ID           
          LEFT JOIN [dbo].[_RefObjItem] as item ON obj.Link = item.ID           
          LEFT JOIN [dbo].[_BindingOptionWithItem] as adv ON it.ID64 = adv.nItemDBID            
         WHERE ch.CharName16 IS NOT NULL 
           AND CodeName128 NOT LIKE '%stone%' 
           AND inv.Slot < 7   group By  ch.CharID, ch.CharName16

您必须将所有值添加到 group by 子句中,该子句在没有聚合函数的 select 子句中使用,因此您的分组依据必须是:

GROUP BY CharID,CharName16