如果我只获取当年的数据,它就可以工作;如果我只获取前一年的数据,它就可以工作;当我同时使用当前和上一年的数据时,我会得到除以 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
因为我认为它是 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 中引入