我正在尝试返回当前撕裂和上一年的数据。我总是收到除以 0 的错误

问题描述 投票:0回答:1

如果我只获取当年的数据,它就可以工作;如果我只获取前一年的数据,它就可以工作;当我同时使用当前和上一年的数据时,我会得到除以 0 的错误?

Select FISCYR,
  LTrim(RTrim(FISCPER)) as 'Period',
  Customer,
  ORDNUMBER,
  LTrim(RTrim(PONUMBER)) as 'PO Number',
  Item,
  LTrim(RTrim([DESC])) as 'Product',
  Cast(QTY as Decimal(18,2)) As 'QTY',
  CAST(EXTINVMISC/EXTWEIGHT as Decimal(18,2)) as 'Price (Lb)',
  LTrim(RTrim(LOTNUMF)) as 'Lot Num',
  LTrim(RTrim(Location)) as 'Location',
  LTrim(RTrim(VIADESC)) as 'Ship Via'  
From DBO.viewinvoicehistory
Where TRANSTYPE=1
  and fiscyr = Year(GETDATE()) 
   or fiscyr = year(DATEADD(YEAR, -1, GETDATE()))
  and CUSTNAME='LOBLAW COMPANIES LIMITED.'
Order By FiscYr DESC,LTrim(RTrim(FISCPER)) DESC
sql getdate
1个回答
0
投票

因为我认为它是 Microsoft SQL Server,所以将您的查询重写为:

SELECT FISCYR,
       TRIM(FISCPER)) as 'Period', --> replace LTrim(RTrim by TRIM
       Customer,
       ORDNUMBER,
       TRIM(PONUMBER)) as 'PO Number',
       Item,
       TRIM([DESC])) as 'Product',
       Cast(QTY as Decimal(18,2)) As 'QTY',
       CAST(EXTINVMISC/NULLIF(EXTWEIGHT, 0) --> use NULIIF function to avoid divide by zero
           as Decimal(18,2)) as 'Price (Lb)',
       TRIM(LOTNUMF)) as 'Lot Num',
       TRIM(Location)) as 'Location',
       TRIM(VIADESC)) as 'Ship Via'  
FROM   dbo.viewinvoicehistory --> dbo not DBO
WHERE  TRANSTYPE = 1
       and (fiscyr = Year(GETDATE()) --> probable logical mistake
            or fiscyr = year(DATEADD(YEAR, -1, GETDATE())))
       and CUSTNAME = 'LOBLAW COMPANIES LIMITED.'
ORDER  BY FiscYr DESC, TRIM(FISCPER)) DESC;

TRIM 取代了 RTRIM(LTRIM(...首次在 2017 版 SQL Server 中引入

© www.soinside.com 2019 - 2024. All rights reserved.