2017-03-24 33 views
1

お客様が1つ以上の予約をしているインスタンスを作成しています。これを行うには、顧客番号が予約テーブルに複数回表示されるたびに、予約が複数あることを示します(これもまた条件です)。残念ながら、私はこのクエリを実行しようとすると、私は得る:SQLエラー1111で問題が発生する

エラーコード:1111(グループ機能の無効な使用)。

ここでは以下のことを説明します。

SELECT FirstName, LastName, tripName 
FROM reservation, customer, trip 
WHERE reservation.CustomerNum = customer.CustomerNum 
AND reservation.TripID = trip.TripID 
AND COUNT(reservation.CustomerNum) > 1 
GROUP BY reservation.CustomerNum; 

私は非常にSQLに新しいです、任意のアドバイスは非常に役立つだろう。

+0

ここで答えを確認した使用する必要があります。http://stackoverflow.com/questions/22141968/error-code-1111-invalid-use-of-groupを-関数。基本的には、あなたのカウントをhaving節に移動する必要があります。 –

答えて

0

GROUP BYを使用している場合は、選択するすべてのフィールドが集計関数に含まれているか、GROUP BY句に含まれている必要があります。

0

あなたが読みやすいものを保持するのに役立ちますし、あなたに余分なキーストロークを保存し、エイリアスを使用して、参加する適切な記述する必要がある、とあなたは、複数のご予約でものにあなたの結果を制限するために、このようなものを使用する必要があります:

select FirstName, LastName, tripName 
from customer c 
    inner join reservation r 
    on c.CustomerNum = r.CustomerNum 
    inner join trip t 
    on r.TripID = t.TripID 
where c.CustomerNum in (
    select ir.CustomerNum 
    from reservation ir 
    group by ir.CustomerNum 
    having count(*) > 1 
) 
+0

ありがとうございます。私は「HAVING」というキーワードを知らなかった。非常に参考に、私は適切な結合とエイリアスを使用する習慣を始めます。 –

+0

@AlexKennedy喜んでお手伝いします! – SqlZim

0

あなたは、フィルタの集計結果(ない)

SELECT FirstName, LastName, tripName 
    FROM reservation 
    INNER JOIN customer on reservation.CustomerNum = customer.CustomerNum 
    INNER JOIN trip on reservation.TripID = trip.TripID 
    GROUP BY reservation.CustomerNum; 
    having COUNT(reservation.CustomerNum) > 1 
関連する問題