-1

私は実際にどのように動作するか分からない問題を抱えています。Google の調査結果に基づいていくつかのことを試しましたが、役に立ちませんでした。ここの誰かが助けてくれることを願っています。

2 つのテーブル (A と B) があり、テーブル AI には選択したい概要データがいくつかあり、テーブル BI にはテーブル A に対応する詳細 (2 つのパラメーターで結合) がありますが、テーブル B のデータのみが必要です。行数でまとめました。

私はこのクエリを持っています:

SELECT s.CartID,
   s.Sender,
   s.Destination,
   s.CartType,
   s.SendDate,
   p.PackageID,
   p.CartID,
   COUNT(b.*) AS nRows
         FROM tblA s LEFT OUTER JOIN tblB p
         ON s.CartID = p.CartID AND s.SendDate = p.CartDate
         WHERE s.Client='3' AND s.SendDate BETWEEN '2012-09-01' AND '2012-09-07'

ただし、これは次のエラーのみを示します。

' ' 付近の構文が正しくありません。*

代わりにこの COUNT(b.PackageID) を使用してみましたが、次のようになります。

列 'tblA.CartID' は、集計関数にも GROUP BY 句にも含まれていないため、選択リストでは無効です。

1回のクエリでこのデータを取得する方法が本当にわかりません。

どんな助けでも大歓迎です。:)

4

2 に答える 2

0

SELECTエラーは、次のように aGROUP BYまたは集計にすべてのフィールドを追加する必要があることを示しています。

SELECT s.CartID,
   s.Sender,
   s.Destination,
   s.CartType,
   s.SendDate,
   p.PackageID,
   p.CartID,
   COUNT(p.*) AS nRows  -- I am guessing this should be p not b
FROM tblA s 
LEFT OUTER JOIN tblB p
  ON s.CartID = p.CartID 
  AND s.SendDate = p.CartDate
WHERE s.Client='3' 
  AND s.SendDate BETWEEN '2012-09-01' AND '2012-09-07'
GROUP BY s.CartID,
   s.Sender,
   s.Destination,
   s.CartType,
   s.SendDate,
   p.PackageID,
   p.CartID

これらのフィールドのすべてを使用したくない場合はGROUP BY、次のようなサブクエリを使用することもできます。

SELECT s.CartID,
   s.Sender,
   s.Destination,
   s.CartType,
   s.SendDate,
   p.PackageID,
   p.CartID,
   p.Cnt as nRows
FROM tblA s 
LEFT OUTER JOIN
(
  SELECT COUNT(*) cnt, CartID, PackageID, CartDate
  FROM tblB
  GROUP BY CartID, PackageID, CartDate
) p
  ON s.CartID = p.CartID 
  AND s.SendDate = p.CartDate
WHERE s.Client='3' 
  AND s.SendDate BETWEEN '2012-09-01' AND '2012-09-07'
于 2012-09-21T10:12:23.417 に答える
0

おそらく b と p のつづりが間違っています。
COUNT には、GROUP BY を使用できます。

SELECT 
   s.CartID,
   s.Sender,
   s.Destination,
   s.CartType,
   s.SendDate,
   p.PackageID,
   p.CartID,
   COUNT(p.*) AS nRows
FROM 
    tblA s LEFT OUTER JOIN tblB p
    ON s.CartID = p.CartID AND s.SendDate = p.CartDate
 WHERE 
    s.Client='3' AND 
    s.SendDate BETWEEN '2012-09-01' AND '2012-09-07'
GROUP BY
   s.CartID,
   s.Sender,
   s.Destination,
   s.CartType,
   s.SendDate,
   p.PackageID,
   p.CartID,
于 2012-09-21T10:13:21.510 に答える