这是一个问题,我在编写正确的查询时出现问题,问题是我到目前为止...
列出来自Customers表的公司名称,联系人姓名,电话号码和国家/地区,以及订单日期为1992年7月1日至1993年6月30日的订单表中的运费总和。订购结果由公司名称设定。查询应生成下面列出的结果集。
SELECT Customers.CompanyName,
Customers.ContactName,
Customers.Phone,
Customers.Country,
SUM(Orders.Freight) AS Total_Freight,
Orders.OrderDate
FROM Customers INNER JOIN Orders ON Customers.CustomerID = Orders.CustomerID
WHERE Orders.OrderDate BETWEEN '1992-07-01' and '1993-06-30'
GROUP BY Customers.CompanyName
我收到此错误:
Msg 8120, Level 16, State 1, Line 2
Column 'Customers.ContactName' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
答案 0 :(得分:1)
您的查询存在多个问题。 。 。但你很亲密我建议:
SELECT c.CompanyName, c.ContactName, c.Phone, c.Country,
SUM(o.Freight) AS Total_Freight
FROM Customers c INNER JOIN
Orders o
ON c.CustomerID = o.CustomerID
WHERE o.OrderDate >= '1992-07-01' AND
o.OrderDate < '1993-07-01'
GROUP BY c.CompanyName, c.ContactName, c.Phone, c.Country
ORDER BY c.CompanyName;
注意:
GROUP BY
。ORDER BY
。从不&#34;假设&#34;结果将按特定顺序排列。OrderDate
已从SELECT
中删除。它与问题无关,它妨碍了公司汇总。BETWEEN
。即使日期上有时间组件,上述逻辑仍然有效。这很有用,因为很容易忘记用于日期常量的确切数据类型(或者其他人将时间从日期更改为日期/时间)。