我有一个问题,我无法真正看到如何工作,我已根据调查结果尝试了一些事情 谷歌,但无济于事。我希望这里有人可以提供帮助。
我有两个表(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子句中。
我真的不知道如何在一个查询中获取这些数据。
任何帮助将不胜感激。 :)
答案 0 :(得分:0)
该错误告诉您需要将SELECT
中的所有字段添加到GROUP 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'
答案 1 :(得分:0)
你可能用p。打错了b 对于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,