-1

我有一个我无法真正了解如何工作的问题,我根据谷歌的发现尝试了一些事情,但无济于事。我希望这里有人可以提供帮助。

我有两个表(A 和 B),表 AI 中有一些我想选择的概览数据,表 BI 中有与表 A 对应的详细信息(连接两个参数),但是表 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 子句中。

我真的不知道如何在一个查询中获取这些数据。

任何帮助,将不胜感激。:)

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 回答