代码之家  ›  专栏  ›  技术社区  ›  Konstantinos Vidakis

列在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。[ntext][duplicate]

  •  0
  • Konstantinos Vidakis  · 技术社区  · 7 年前

    我是sql新手,很抱歉,如果答案很明显,但我在任何地方都找不到它。 所以我想选择同一类别产品的类别名称、描述和平均价格。下面是所涉及的两个表格的图片。问题是我找不到方法来表达它的描述。 (共有8个类别,每个类别有1个描述)

    这是我到目前为止编写的代码,但有一个错误:

    SELECT  c.CategoryName,c.Description,avg(p.UnitPrice) 
    FROM Categories AS c
    INNER JOIN Products AS p ON c.CategoryID=p.CategoryID
    GROUP BY c.CategoryName
    

    错误:

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

    对不起,我的英语不好:/

    1 回复  |  直到 7 年前
        1
  •  0
  •   Thom A    7 年前

    (n)text 不能在聚合或窗口函数中使用。自SQL Server 2008(如果我没记错的话,可能是2005年)以来,它也一直被弃用。你真的应该使用 (n)varchar(MAX)

    如果你真的 “有” 使用 (n) 文本 然后,您需要首先进行聚合,然后检索 (n) 文本 列:

    WITH Averages AS (
        SELECT p.CategoryID, avg(p.UnitPrice) AS AveragePrice
        FROM p.CategoryID
        GROUP BY p.CategoryID)
    SELECT C.CategoryName, C.Description, A.AveragePrice
    FROM Averages A
         JOIN Categories C ON A.CategoryID = C.CategoryID;
    

    (注意,由于缺少DDL和样本数据,因此未进行测试)