2017-11-27 94 views
0

SQLの初心者です。答えがわかりましたが残念ですがどこでも見つけられませんでした。 だから私は、同じcategory.Belowにある製品のCategoryName、説明と平均価格を選択したい2テーブルの写真です。問題は私がそれを表示する方法を見つけることができない記述です。 (そこ8つのカテゴリがあり、すべてのカテゴリが1記述されている)集計関数またはGROUP BY句に含まれていないため、選択リストで列が無効です。[ntext]

これは私がこれまでに作ったコードですが、それは誤りがあります。

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. 

私の悪い英語のために申し訳ありません:/

+0

このエラーはあなたの正確な問題を教えています。選択の隣のリストに説明がありますが、あなたのグループの句ではありません。 – Matt

+0

私はそれを試しましたが、そのntextには次のような理由があります。text、ntext、およびimageのデータ型は、 IS NULLまたはLIKE演算子。 –

+0

ntextと物事に関するエラーはあなたがグループ化することを許可されておらず、別のエラーであることを意味します。しかし、 'SELECT'と' GROUP BY'の列を 'CAST(c.Description AS VARCHAR(???))'のように集計できるデータ型にキャストすることで解決します。容認できる長さであるか、または「MAX」を使用する。 – Matt

答えて

0

(n)textは、集約関数またはウィンドウ関数では使用できません。また、SQL Server 2008以降では廃止されています(もし私が正しく言えば、おそらく2005年)。実際に(n)varchar(MAX)を使用しているはずです。

あなたが本当に、あなたが最初にあなたの集計を行う必要がありますし、お使い(n)text列の値が取得(n)textを使用するようにを「持っている」場合:

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とサンプルデータの不足のため)

+0

コメントに問題は解決しましたが、とにかく感謝! –

+2

@Larnu、私はCTEで参加が必要であるとは確信していません。 – SQLCliff

+0

どこで使うの? 私はあなたの答えを受け入れるつもりですが、それはあまりにも機能するためです。 –

関連する問題