2017-12-13 21 views
0
select 
person.firstname, 
person.lastname, 
sum(order_item.pricecharged) as [sales] 
from person cross join order_item 
join ORDERS 
on ORDERS.EmployeeID = PERSON.PersonID 
group by person.firstname 

取得のエラー:それが含まれていないため 列「person.LastName」は、選択リストに無効である5集約エラーSQLクエリ

メッセージ8120、レベル16、状態1、行集計関数またはGROUP BY句のいずれかで指定します。

(まだSQLクエリに新しい謝罪)

+1

により、グループ行を変更したいこれは、あなたがリストでグループにperson.lastnameを追加する必要が – Strawberry

+1

よりTSQLまたはSQLサーバーのような私には見えます。 – Bob

+0

そのエラーメッセージがT-SQLであることを確認して、MySQLをタグとして削除しました –

答えて

2

エラーは何が間違っているかを示します。リストにグループに含まれていない選択リスト(特にperson.lastname)に列がありません。あなたはファーストネームでグループを宣言してから、最後の名前を出力に追加します。あなたがBob JonesとBob Smithを雇っていれば、両方の売上が合計されますが、あなたはSQLに姓の扱いを知らせていないので、エラーになります。この場合

、あなたはおそらく

group by person.firstname, person.lastname 
2

group by句にすべての「非凝集」の列を置き、エラーメッセージがわかります正確に何をすべきか:

SELECT 
     person.firstname       -- this is "non-aggregating" 
    , person.lastname       -- this is "non-aggregating" 
    , SUM(order_item.pricecharged) AS [sales] -- this is "aggregating" 
FROM person 
CROSS JOIN order_item 
JOIN ORDERS ON ORDERS.EmployeeID = PERSON.PersonID 
GROUP BY 
     person.firstname 
    , person.lastname