SQL-非布尔表达式的错误

时间:2018-10-28 02:10:32

标签: sql sql-server

有人可以帮我找到这个问题吗?

这是我的代码

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子句

3 个答案:

答案 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子句中的值即可。