有人可以帮我找到这个问题吗?
这是我的代码
SELECT
MSC_Customer.cust_number, cust_name,
COUNT(ord_number) AS number_of_orders
FROM
MSC_Customer, MSC_Order
WHERE
MSC_Customer.cust_number = MSC_Order.cust_number
HAVING
MSC_Customer.cust_number
GROUP BY
cust_city LIKE 'Pennsylvania';
我收到此错误
信息4145,第15级,状态1,第5行
在需要条件的上下文中在“ GROUP”附近指定的非布尔类型的表达式。
我正在尝试连接两个表,并在SELECT语句中使用COUNT聚合和GROUP BY子句
答案 0 :(得分:3)
我将建议以下更正的查询:
SELECT
c.cust_number,
c.cust_name,
COUNT(ord_number) AS number_of_orders
FROM MSC_Customer c
INNER JOIN MSC_Order o
ON c.MSC_Customer = o.cust_number
WHERE
cust_city LIKE '%Pennsylvania%' -- or maybe just cust_city = 'Pennsylvania'
GROUP BY
c.cust_number,
c.cust_name;
我假设您要按客户名称/号码进行汇总。客户城市的支票似乎属于WHERE
子句,而不属于GROUP BY
子句。值得注意的是,我将您的查询改为使用显式内部联接,而不是旧式的隐式联接。这是现在编写联接的首选方式。
答案 1 :(得分:0)
使用Where
而不是Group By
中的条件。请尝试以下脚本
SELECT MSC_Customer.cust_number, cust_name, count(ord_number) AS
number_of_orders
FROM MSC_Customer
JOIN MSC_Order ON
MSC_Customer.cust_number = MSC_Order.cust_number
WHERE cust_city like '%Pennsylvania%'
GROUP BY cust_city;
答案 2 :(得分:0)
通常,当您编写在表达式或条件中使用但未传递条件值的关键字时,会发生此类错误。例如-
select * from table where
这将产生与您未在此处传递where值的错误相同的错误
您错过了在Have子句中写条件的操作。您需要在Have子句中使用operator写入值,该子句可以是以下之一。
HAVING
MSC_Customer.cust_number = '0120008024'
OR
HAVING
MSC_Customer.cust_number <> '0120008024'
OR
HAVING
MSC_Customer.cust_number like '%0120008024%'
您只需要根据需要指定所缺少的hading子句中的值即可。