1

私は3つのテーブルを持っています:

tblCustomer
CustomerID  CustomerName
   1         Customer 1
   2         Customer 2

tblOrder
OrderID CustomerID  OrderTypeID LoanNumber
1            1            1      98513542
2            1            1      71283527
3            1            1      10268541
4            1            1      61258965

tblOrderType
OrderTypeID    OrderTypeName
   1             Purchase
   2             Rental

今、私はCustomerIDCustomerNameOrderTypeNameおよびOrderCountを返したいと思っていOrderCountます。次のクエリを使用しています。

SELECT tblCustomer.CustomerID, tblCustomer.customerName, tblOrderType.OrderTypeName, tblOrder.OrderID
FROM tblCustomer 
INNER JOIN tblOrder 
ON tblCustomer.CustomerID = tblOrder.CustomerID
INNER JOIN tblOrderType 
ON tblOrderType.OrderTypeID = tblOrder.OrderTypeID

それは一種の作品です。OrderCount明らかに、を除いて、私が求めているすべてを取得します。結果は次のようになります。

CustomerID         CustomerName      OrderTypeName     OrderID
    1               Customer 1         Purchase           1
    1               Customer 1         Purchase           2
    1               Customer 1         Purchase           3
    1               Customer 1         Purchase           4

しかし、私が探しているのはこれです:

CustomerID         CustomerName      OrderTypeName     OrderCount
    1               Customer 1         Purchase             4

Count()さて、さまざまな場所でクエリに追加しようとしましたが( Count(tblOrder.OrderID)1つ)、エラーが発生しましたtblCustomer.CustomerID is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

これは宿題ではありません。学校では教えられなかったので、SQL とデータベースの相互作用についてはよくわかりません。友人が私にシナリオを投げかけています。

4

3 に答える 3

3

グループ化と集計を使用する必要があります。

SELECT tblCustomer.CustomerID, tblCustomer.customerName, tblOrderType.OrderTypeName, 
count (tblOrder.OrderID) asOrderCOunt
FROM tblCustomer 
INNER JOIN tblOrder 
ON tblCustomer.CustomerID = tblOrder.CustomerID
INNER JOIN tblOrderType 
ON tblOrderType.OrderTypeID = tblOrder.OrderTypeID
GROUP BY
tblCustomer.CustomerID, 
tblCustomer.customerName, 
tblOrderType.OrderTypeName

集計されていないものをすべてグループ化せずに集計関数を使用することはできません。

于 2013-10-21T21:22:12.683 に答える
3

エラーメッセージは問題を示しています。集計演算子 ( COUNTSUMAVGなど) を使用するときは常に、これらをどのように集計するかをデータベースに指示する必要があります。ステートメントを使用してこれを行いますGROUP BY(リンクは SQL Server 用ですが、通常はすべてのデータベース エンジンに適用されます)。

SELECT 
     C.CustomerID
    ,C.customerName
    ,OT.OrderTypeName
    ,COUNT(O.OrderID)
FROM tblCustomer C 
INNER JOIN tblOrder O 
   ON C.CustomerID = O.CustomerID
INNER JOIN tblOrderType OT
   ON OT.OrderTypeID = O.OrderTypeID
GROUP BY
     C.CustomerID
    ,C.customerName
    ,OT.OrderTypeName
于 2013-10-21T21:23:05.083 に答える
0

これを試してください。グループ化を追加して、グループ化された行を数えるだけです

SELECT tblCustomer.CustomerID, tblCustomer.customerName, 
  tblOrderType.OrderTypeName, tblOrder.OrderID, 
  COUNT(tblOrder.OrderID) as OrderCount
FROM tblCustomer INNER JOIN tblOrder 
  ON tblCustomer.CustomerID = tblOrder.CustomerID
INNER JOIN tblOrderType 
  ON tblOrderType.OrderTypeID = tblOrder.OrderTypeID
GROUP BY tblCustomer.CustomerID, tblCustomer.customerName, 
  tblOrderType.OrderTypeName
于 2013-10-21T21:23:32.337 に答える