Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 尝试分割数据时出现零除错误_Sql Server - Fatal编程技术网

Sql server 尝试分割数据时出现零除错误

Sql server 尝试分割数据时出现零除错误,sql-server,Sql Server,这是我的密码: SELECT CASHIER_ID AS SERVER, CONVERT(VARCHAR(10),[DATETIME],111) AS DATE, SUM(GRAND_TOTAL) AS TOTAL_SALES, SUM(NUM_PEOPLE_PARTY) AS NUMBER_SERVED, SUM(GRAND_TOTAL) / SUM(NUM_PEOPLE_PARTY) AS CASHPERCUSTOMER FROM INVOICE_TOTALS WHE

这是我的密码:

SELECT CASHIER_ID AS SERVER, CONVERT(VARCHAR(10),[DATETIME],111) AS DATE, 
  SUM(GRAND_TOTAL) AS TOTAL_SALES, 
  SUM(NUM_PEOPLE_PARTY) AS NUMBER_SERVED,  
  SUM(GRAND_TOTAL) / SUM(NUM_PEOPLE_PARTY) AS CASHPERCUSTOMER 
FROM INVOICE_TOTALS 
WHERE [DATETIME] >= '2012-06-01' 
GROUP BY CASHIER_ID, CONVERT(VARCHAR(10),[DATETIME],111)  
除了以下内容外,所有内容都与代码完美配合:

SUM(GRAND_TOTAL) / SUM(NUM_PEOPLE_PARTY) AS CASHPERCUSTOMER
部分。如果我把这一行去掉,那么一切都很完美,如果我把它放进去,我会收到以下错误:

消息:无法检索数据表。
选择出纳ID作为服务器,…上面查询的其余部分…

堆栈跟踪:
…不相关的堆栈跟踪

消息:遇到被零除的错误。

堆栈跟踪:
…不相关的堆栈跟踪


这是使用SQL Server的餐厅销售点(POS)系统中的SQL。知道为什么会发生这种情况吗?

除法前检查0:

SELECT
    ...,
    CASE WHEN SUM(NUM_PEOPLE_PARTY) = 0
         THEN NULL
         ELSE SUM(GRAND_TOTAL) / SUM(NUM_PEOPLE_PARTY) END AS CASHPERCUSTOMER,
    ... 
或者使用以下方法获得相同的结果:


您需要以这种方式运行查询,并告诉我们是否有任何结果:

SELECT CASHIER_ID AS SERVER, 
  CONVERT(VARCHAR(10),[DATETIME],111) AS DATE, 
  SUM(GRAND_TOTAL) AS TOTAL_SALES,  
  SUM(NUM_PEOPLE_PARTY) AS NUMBER_SERVED
FROM INVOICE_TOTALS 
WHERE [DATETIME] >= '2012-06-01' 
GROUP BY CASHIER_ID, CONVERT(VARCHAR(10),[DATETIME],111) 
HAVING SUM(NUM_PEOPLE_PARTY) = 0;
如果有结果,那么您的查询显然需要满足它们。例如:

SELECT SERVER, [DATE], TOTAL_SALES, NUMBER_SERVED,
  CASHPERCUSTOMER = TOTAL_SALES / NULLIF(NUMBER_SERVED, 0)
FROM
(
  SELECT CASHIER_ID AS SERVER, 
    CONVERT(VARCHAR(10),[DATETIME],111) AS DATE, 
    SUM(GRAND_TOTAL) AS TOTAL_SALES,  
    SUM(NUM_PEOPLE_PARTY) AS NUMBER_SERVED
  FROM INVOICE_TOTALS 
  WHERE [DATETIME] >= '2012-06-01' 
  GROUP BY CASHIER_ID, CONVERT(VARCHAR(10),[DATETIME],111) 
);

但是你应该弄清楚为什么会有0的结果,因为这没有多大意义。

因为你试图除以0?你的第一个答案看起来不错,但你的第二个答案不一样,也无法解决问题,因为它用0的分母替换了空分母。实际上,除以null不是问题,因为该除法的计算结果为null。@MarkM:您是否将NULLIF与IFNULL混淆?这非常有效(第一个建议),非常感谢您花时间@tmparisi所以我认为你没有兴趣调试这个问题,也没有兴趣确定为什么你有这样的日子,收银员有销售,但没有为任何人提供服务?听起来不仅仅是“使用查询将其隐藏起来”的问题。谢谢Aaron,但我没有权限更改数据库问题。除此之外,您不了解我们的操作,认为您从SQL脚本了解我们的业务操作是愚蠢的。然而,你可以放心,因为有些公司提供结转服务,所以有零。。。可能你也参加了?但是谢谢你的回复。
SELECT SERVER, [DATE], TOTAL_SALES, NUMBER_SERVED,
  CASHPERCUSTOMER = TOTAL_SALES / NULLIF(NUMBER_SERVED, 0)
FROM
(
  SELECT CASHIER_ID AS SERVER, 
    CONVERT(VARCHAR(10),[DATETIME],111) AS DATE, 
    SUM(GRAND_TOTAL) AS TOTAL_SALES,  
    SUM(NUM_PEOPLE_PARTY) AS NUMBER_SERVED
  FROM INVOICE_TOTALS 
  WHERE [DATETIME] >= '2012-06-01' 
  GROUP BY CASHIER_ID, CONVERT(VARCHAR(10),[DATETIME],111) 
);