【发布时间】:2021-02-25 17:31:40
【问题描述】:
我正在使用下面的查询,它给了我一个错误。我得到的错误在最底部。该错误是由我的一些事务中的 lat 和 long 具有空值引起的。我已将代码放入其中以删除 3 个表中每个表中的 lat 和 long 中的所有 null。
我该怎么做才能使查询正常工作。查询工作正常并输出大约 100 行,直到遇到第一个空值然后抛出错误。
SELECT DISTINCT
a.region,
c.Market_zone,
c.delivery_center_zone,
a.period,
a.E3Location_num,
a.dad_name,
a.dad_latitude,
a.dad_longitude,
c.lat,
c.long,
z.latitude,
z.longitude,
a.event_date,
a.units,
a.driver_num,
d.driver_name,
a.delivery_reason,
b.description,
c.wsensor,
a.autowillstatus,
a.delivery_exception,
a.phone_order,
a.cancel,
c.lob,
a.zone,
a.keyindex,
f.exception_reasons,
ACOS(COS(RADIANS(90-a.dad_latitude)) *COS(RADIANS(90-c.lat)) +SIN(RADIANS(90-a.dad_latitude)) *SIN(RADIANS(90-c.lat)) *COS(RADIANS(a.dad_longitude-c.long))) *6371 as kms_from_tank,
CASE
WHEN ACOS(COS(RADIANS(90-a.dad_latitude)) *COS(RADIANS(90-c.lat)) +SIN(RADIANS(90-a.dad_latitude)) *SIN(RADIANS(90-c.lat)) *COS(RADIANS(a.dad_longitude-c.long))) *6371 > 5 then 'N'
ELSE 'Y'
END as Cancelled_on_Tanksite,
ACOS(COS(RADIANS(90-a.dad_latitude)) *COS(RADIANS(90-z.latitude)) +SIN(RADIANS(90-a.dad_latitude)) *SIN(RADIANS(90-z.latitude)) *COS(RADIANS(a.dad_longitude-z.longitude))) *6371 as kms_from_yard,
CASE
WHEN ACOS(COS(RADIANS(90-a.dad_latitude)) *COS(RADIANS(90-z.latitude)) +SIN(RADIANS(90-a.dad_latitude)) *SIN(RADIANS(90-z.latitude)) *COS(RADIANS(a.dad_longitude-z.longitude))) *6371 > 5 then 'N'
ELSE 'Y'
END as Cancelled_at_Yard,
a.E3Location_num + '-' + CAST(a.event_date AS varchar (50)) AS unique_id,
a.size,
CASE
WHEN a.size = '2222' THEN 'MMT'
WHEN a.size = '22222' THEN 'MMT'
WHEN a.size = '0' THEN 'Cyl'
ELSE 'BULK'
END AS Department
FROM
e3.dbo.E3table_1 (nolock)a
LEFT JOIN
(SELECT * FROM openquery(suppro_supw, 'SELECT reason_id, description
FROM DELIVERY_REASON
AT isolation 0')) b ON a.delivery_reason = b.reason_id
LEFT JOIN
(SELECT * FROM [SPPWEBPDNJ04].[Delivery_Customer_Master].[dbo].[Del_Customer_Master]
WHERE lat IS NOT NULL AND long IS NOT NULL) c ON c.Location = a.E3Location_num
LEFT JOIN
(SELECT * FROM openquery(suppro_supw, 'SELECT driver_id, driver_name
FROM DRIVER_HEADER
AT isolation 0')) d ON d.driver_id = a.driver_num
LEFT JOIN
(SELECT * FROM openquery(SUPPRO_SUPW, 'SELECT
cc.full_account
,ee.tank_num
,aa.name
,ee.driver_num
,aa.delivery_hold
,aa.department_code
,dd.size
,bb.exception_reasons
,dd.delivery_type
,ee.event_date
FROM
ACCOUNTS aa,
DELIVERY_EXCEPTION bb,
FULL_ACCOUNT cc,
TRANS_DELIVERY dd,
TRANS_MAIN ee
WHERE
aa.account_num = bb.account_num
AND aa.account_num = cc.account_num
AND aa.account_num = dd.account_num
AND aa.account_num = ee.account_num
AND bb.account_num = cc.account_num
AND bb.account_num = dd.account_num
AND bb.trx_unique_key = dd.trx_unique_key
AND bb.trx_unique_key = ee.trx_unique_key
AND cc.account_num = dd.account_num
AND ee.event_date > "2020-01-01"
and bb.exception_reasons like ''%SECOND%''
AT ISOLATION 0'))f
on rtrim(f.full_account)+'-'+cast(f.tank_num as varchar (3)) = a.E3Location_num
and f.event_date = a.event_date
left join
(Select * FROM e3.dbo.ADDs_Delivery_centers_info (nolock) where latitude is not null and longitude is not null) z
on z.Delivery_center_num = a.cost_center
where
a.driver_num > 0
and truck_num > 0
and a.units >= 0
and a.event_date > '2019-01-01'
and a.Posting_code in (1,2,10,99)
and a.region in ('AB1','BC1','PR1')
and a.dad_latitude is not null
and a.dad_longitude is not null
我收到一个错误:
消息 3623,第 16 级,状态 1,第 1 行
发生域错误
【问题讨论】:
-
此错误表明您正在使用的一个或多个数学函数的参数错误,例如 LOG(-1) 或 SQRT(-1),在数学上没有意义,SQL 返回错误信息
-
我假设您使用的是 sql server 2005 ,因为错误消息文本在 2005 年之后的下一个 sql server 版本中有所更改
-
是,使用 sql server 2005
标签: sql sql-server sql-server-2005