我在网页中查询,调用到此存储过程后就出错了,显示tomcat出错页面。myeclipse控制台显示:子查询返回的值多于一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。
但是我在查询分析器中手动调用该存储过程exec show_voyages_state_voyages '2004-02-01','2004-02-29','001','0'可以得到结果集。请问到底是怎么回事?如果是子查询错了那如何定位错误?
该存储过程如下CREATE procedure show_voyages_state_voyages
(
@starttime char(10),
@endtime char(10),
@shipcode char(3),
@voyageskind char(1)
)
as
begin
if @shipcode='000'
set @shipcode = null
if @voyageskind='0'
set @voyageskind = null
SELECT voyages_port_arrive_port_time AS ArriveTime,
voyages_port_off_berth_time AS LeaveTime,voyages_kind,
voyages_port_type_code,a.ship_code, a.voyages_code,
ship_name, a.voyages_port_SN, voyages_start_time AS StartTime,
AMile = ISNULL(b.Line_average_mileage,0) ,
AMileLoad = ISNULL(b.Line_average_mileage,0),
GoodsName=ISNULL (goods_big_class_name,''),port_name,
MaxSN =(Select Max(e.voyages_port_SN) From HY_voyages_port e WHERE (e.ship_code=a.ship_code AND e.voyages_code=a.voyages_code)),
Quantity=IsNull(voyages_unLoad_actuality_quantity,0),
QuantityLoad=IsNull(voyages_Load_actuality_quantity,0),
NotBusinessTime=IsNull(( Select Sum(IsNull(voyages_not_business_time,0)) From HY_voyages_not_business WHERE voyages_code=a.voyages_code AND ship_code=a.ship_code ),0),
EndTime=(Select Top 1 voyages_unload_end_time From HY_voyages_unload WHERE voyages_code=a.voyages_code AND ship_code=a.ship_code ORDER BY voyages_unload_end_time DESC ) ,
UnloadPort=(Select Top 1 port_name From HY_voyages_unLoad am INNER JOIN HY_port bm On am.port_code=bm.port_code WHERE voyages_code=a.voyages_code AND ship_code=a.ship_code ),
CJState=( Select voyages_income_expend_CJ_state From HY_voyages_income_expend WHERE voyages_code=a.voyages_code AND ship_code=a.ship_code ),
NotOnVoyagesTime=IsNull((IsNull((Select Sum(Datediff(minute,voyages_port_arrive_port_time,voyages_port_off_berth_time)) From HY_voyages_port ABC INNER JOIN HY_voyages_not_business ABCD ON ABC.ship_code=ABCD.ship_code AND ABC.voyages_code=ABCD.voyages_code WHERE ABC.ship_code=f.ship_code AND ABC.voyages_code=f.voyages_code AND Datediff(minute,voyages_not_business_event_start_time,voyages_port_arrive_port_time)>0 AND Datediff(minute,voyages_port_off_berth_time,voyages_not_business_event_end_time)>0 AND NOT voyages_port_off_berth_time Is Null AND voyages_port_off_berth_time<>'1900-1-1'),0)+IsNull( (Select Sum(DateDiff(minute,voyages_not_business_event_start_time,voyages_port_off_berth_time)) From HY_voyages_port ABC1 INNER JOIN HY_voyages_not_business ABCD1 ON ABC1.ship_code=ABCD1.ship_code AND ABC1.voyages_code=ABCD1.voyages_code WHERE ABC1.ship_code=f.ship_code AND ABC1.voyages_code=f.voyages_code AND DateDiff(minute,voyages_not_business_event_start_time,voyages_port_arrive_port_time)<=0 AND DateDiff(minute,voyages_not_business_event_start_time,voyages_port_off_berth_time)>0 AND Datediff(minute,voyages_port_off_berth_time,voyages_not_business_event_end_time)>0),0)+IsNull( (Select Sum(DateDiff(minute,voyages_port_arrive_port_time,voyages_not_business_event_end_time)) From HY_voyages_port ABC2 INNER JOIN HY_voyages_not_business ABCD2 ON ABC2.ship_code=ABCD2.ship_code AND ABC2.voyages_code=ABCD2.voyages_code WHERE ABC2.ship_code=f.ship_code AND ABC2.voyages_code=f.voyages_code AND DateDiff(minute,voyages_not_business_event_end_time,voyages_port_arrive_port_time)<0 AND DateDiff(minute,voyages_not_business_event_start_time,voyages_port_arrive_port_time)>0 AND DateDiff(minute,voyages_not_business_event_end_time,voyages_port_off_berth_time)>=0),0)+IsNull((Select Sum(voyages_not_business_time*60) From HY_voyages_port ABC INNER JOIN HY_voyages_not_business ABCD ON ABC.ship_code=ABCD.ship_code AND ABC.voyages_code=ABCD.voyages_code WHERE ABC.ship_code=f.ship_code AND ABC.voyages_code=f.voyages_code AND Datediff(minute,voyages_port_arrive_port_time,voyages_not_business_event_start_time)>=0 AND Datediff(minute,voyages_not_business_event_end_time,voyages_port_off_berth_time)>=0),0)),0),
NotVoyagesNotBusinessTime=IsNull((Select Top 1 voyages_have_not_business_state_code From HY_voyages Where ship_code=a.ship_code AND voyages_code<a.voyages_code ORDER BY voyages_code DESC),0)
FROM HY_voyages_port a
INNER JOIN HY_voyages f
ON (a.ship_code=f.ship_code AND a.voyages_code=f.voyages_code)
INNER JOIN HY_ship AA
ON a.ship_code=AA.ship_code
INNER JOIN HY_port dd
ON a.port_code=dd.port_code
LEFT JOIN HY_voyages_load c
ON (a.ship_code=c.ship_code AND a.voyages_code=c.voyages_code AND a.port_code=c.port_code)
LEFT JOIN HY_voyages_unload e
ON (a.ship_code=e.ship_code AND a.voyages_code=e.voyages_code AND a.port_code=e.port_code)
LEFT JOIN HY_goods_big_class d
ON e.goods_big_class_code=d.goods_big_class_code
LEFT JOIN HY_line b
ON (Substring(b.line_code,1,3)=a.port_code AND Substring(b.line_code,4,3)=(SELECT TOP 1 c.port_code FROM HY_voyages_load c Where c.ship_code = a.ship_code And c.voyages_code = a.voyages_code ORDER BY voyages_load_OK_time ASC ))
WHERE ( (Datediff(month,@endtime,DateAdd(month,Convert(INT,voyages_statistic_kind),(SubString(voyages_month_code,1,4)+'-'+SubString(voyages_month_code,5,2)+'-01')))<=0
AND Datediff(month,@starttime,DateAdd(month,Convert(INT,voyages_statistic_kind),(SubString(voyages_month_code,1,4)+'-'+SubString(voyages_month_code,5,2)+'-01')))>=0) )
AND (@shipcode is null or a.ship_code=@shipcode)
AND (@voyageskind is null or voyages_kind=@voyageskind)
ORDER BY a.ship_code,a.voyages_code,voyages_port_SN
end
GO
但是我在查询分析器中手动调用该存储过程exec show_voyages_state_voyages '2004-02-01','2004-02-29','001','0'可以得到结果集。请问到底是怎么回事?如果是子查询错了那如何定位错误?
该存储过程如下CREATE procedure show_voyages_state_voyages
(
@starttime char(10),
@endtime char(10),
@shipcode char(3),
@voyageskind char(1)
)
as
begin
if @shipcode='000'
set @shipcode = null
if @voyageskind='0'
set @voyageskind = null
SELECT voyages_port_arrive_port_time AS ArriveTime,
voyages_port_off_berth_time AS LeaveTime,voyages_kind,
voyages_port_type_code,a.ship_code, a.voyages_code,
ship_name, a.voyages_port_SN, voyages_start_time AS StartTime,
AMile = ISNULL(b.Line_average_mileage,0) ,
AMileLoad = ISNULL(b.Line_average_mileage,0),
GoodsName=ISNULL (goods_big_class_name,''),port_name,
MaxSN =(Select Max(e.voyages_port_SN) From HY_voyages_port e WHERE (e.ship_code=a.ship_code AND e.voyages_code=a.voyages_code)),
Quantity=IsNull(voyages_unLoad_actuality_quantity,0),
QuantityLoad=IsNull(voyages_Load_actuality_quantity,0),
NotBusinessTime=IsNull(( Select Sum(IsNull(voyages_not_business_time,0)) From HY_voyages_not_business WHERE voyages_code=a.voyages_code AND ship_code=a.ship_code ),0),
EndTime=(Select Top 1 voyages_unload_end_time From HY_voyages_unload WHERE voyages_code=a.voyages_code AND ship_code=a.ship_code ORDER BY voyages_unload_end_time DESC ) ,
UnloadPort=(Select Top 1 port_name From HY_voyages_unLoad am INNER JOIN HY_port bm On am.port_code=bm.port_code WHERE voyages_code=a.voyages_code AND ship_code=a.ship_code ),
CJState=( Select voyages_income_expend_CJ_state From HY_voyages_income_expend WHERE voyages_code=a.voyages_code AND ship_code=a.ship_code ),
NotOnVoyagesTime=IsNull((IsNull((Select Sum(Datediff(minute,voyages_port_arrive_port_time,voyages_port_off_berth_time)) From HY_voyages_port ABC INNER JOIN HY_voyages_not_business ABCD ON ABC.ship_code=ABCD.ship_code AND ABC.voyages_code=ABCD.voyages_code WHERE ABC.ship_code=f.ship_code AND ABC.voyages_code=f.voyages_code AND Datediff(minute,voyages_not_business_event_start_time,voyages_port_arrive_port_time)>0 AND Datediff(minute,voyages_port_off_berth_time,voyages_not_business_event_end_time)>0 AND NOT voyages_port_off_berth_time Is Null AND voyages_port_off_berth_time<>'1900-1-1'),0)+IsNull( (Select Sum(DateDiff(minute,voyages_not_business_event_start_time,voyages_port_off_berth_time)) From HY_voyages_port ABC1 INNER JOIN HY_voyages_not_business ABCD1 ON ABC1.ship_code=ABCD1.ship_code AND ABC1.voyages_code=ABCD1.voyages_code WHERE ABC1.ship_code=f.ship_code AND ABC1.voyages_code=f.voyages_code AND DateDiff(minute,voyages_not_business_event_start_time,voyages_port_arrive_port_time)<=0 AND DateDiff(minute,voyages_not_business_event_start_time,voyages_port_off_berth_time)>0 AND Datediff(minute,voyages_port_off_berth_time,voyages_not_business_event_end_time)>0),0)+IsNull( (Select Sum(DateDiff(minute,voyages_port_arrive_port_time,voyages_not_business_event_end_time)) From HY_voyages_port ABC2 INNER JOIN HY_voyages_not_business ABCD2 ON ABC2.ship_code=ABCD2.ship_code AND ABC2.voyages_code=ABCD2.voyages_code WHERE ABC2.ship_code=f.ship_code AND ABC2.voyages_code=f.voyages_code AND DateDiff(minute,voyages_not_business_event_end_time,voyages_port_arrive_port_time)<0 AND DateDiff(minute,voyages_not_business_event_start_time,voyages_port_arrive_port_time)>0 AND DateDiff(minute,voyages_not_business_event_end_time,voyages_port_off_berth_time)>=0),0)+IsNull((Select Sum(voyages_not_business_time*60) From HY_voyages_port ABC INNER JOIN HY_voyages_not_business ABCD ON ABC.ship_code=ABCD.ship_code AND ABC.voyages_code=ABCD.voyages_code WHERE ABC.ship_code=f.ship_code AND ABC.voyages_code=f.voyages_code AND Datediff(minute,voyages_port_arrive_port_time,voyages_not_business_event_start_time)>=0 AND Datediff(minute,voyages_not_business_event_end_time,voyages_port_off_berth_time)>=0),0)),0),
NotVoyagesNotBusinessTime=IsNull((Select Top 1 voyages_have_not_business_state_code From HY_voyages Where ship_code=a.ship_code AND voyages_code<a.voyages_code ORDER BY voyages_code DESC),0)
FROM HY_voyages_port a
INNER JOIN HY_voyages f
ON (a.ship_code=f.ship_code AND a.voyages_code=f.voyages_code)
INNER JOIN HY_ship AA
ON a.ship_code=AA.ship_code
INNER JOIN HY_port dd
ON a.port_code=dd.port_code
LEFT JOIN HY_voyages_load c
ON (a.ship_code=c.ship_code AND a.voyages_code=c.voyages_code AND a.port_code=c.port_code)
LEFT JOIN HY_voyages_unload e
ON (a.ship_code=e.ship_code AND a.voyages_code=e.voyages_code AND a.port_code=e.port_code)
LEFT JOIN HY_goods_big_class d
ON e.goods_big_class_code=d.goods_big_class_code
LEFT JOIN HY_line b
ON (Substring(b.line_code,1,3)=a.port_code AND Substring(b.line_code,4,3)=(SELECT TOP 1 c.port_code FROM HY_voyages_load c Where c.ship_code = a.ship_code And c.voyages_code = a.voyages_code ORDER BY voyages_load_OK_time ASC ))
WHERE ( (Datediff(month,@endtime,DateAdd(month,Convert(INT,voyages_statistic_kind),(SubString(voyages_month_code,1,4)+'-'+SubString(voyages_month_code,5,2)+'-01')))<=0
AND Datediff(month,@starttime,DateAdd(month,Convert(INT,voyages_statistic_kind),(SubString(voyages_month_code,1,4)+'-'+SubString(voyages_month_code,5,2)+'-01')))>=0) )
AND (@shipcode is null or a.ship_code=@shipcode)
AND (@voyageskind is null or voyages_kind=@voyageskind)
ORDER BY a.ship_code,a.voyages_code,voyages_port_SN
end
GO
@endtime char(10), @shipcode char(3), @voyageskind char(1))
AS BEGIN IF @shipcode = '000'
SET @shipcode = NULL IF @voyageskind = '0'
SET @voyageskind = NULL
SELECT voyages_port_arrive_port_time AS ArriveTime,
voyages_port_off_berth_time AS LeaveTime, voyages_kind,
voyages_port_type_code, a.ship_code, a.voyages_code, ship_name,
a.voyages_port_SN, voyages_start_time AS StartTime,
AMile = ISNULL(b.Line_average_mileage, 0),
AMileLoad = ISNULL(b.Line_average_mileage, 0),
GoodsName = ISNULL(goods_big_class_name, ''), port_name,
MaxSN =
(SELECT MAX(e.voyages_port_SN)
FROM HY_voyages_port e
WHERE (e.ship_code = a.ship_code AND
e.voyages_code = a.voyages_code)),
Quantity = IsNull(voyages_unLoad_actuality_quantity, 0),
QuantityLoad = IsNull(voyages_Load_actuality_quantity, 0),
NotBusinessTime = IsNull
((SELECT SUM(IsNull(voyages_not_business_time, 0))
FROM HY_voyages_not_business
WHERE voyages_code = a.voyages_code AND ship_code = a.ship_code),
0), EndTime =
(SELECT TOP 1 voyages_unload_end_time
FROM HY_voyages_unload
WHERE voyages_code = a.voyages_code AND
ship_code = a.ship_code
ORDER BY voyages_unload_end_time DESC), UnloadPort =
(SELECT TOP 1 port_name
FROM HY_voyages_unLoad am INNER JOIN
HY_port bm ON am.port_code = bm.port_code
WHERE voyages_code = a.voyages_code AND ship_code = a.ship_code),
CJState =
(SELECT voyages_income_expend_CJ_state
FROM HY_voyages_income_expend
WHERE voyages_code = a.voyages_code AND ship_code = a.ship_code),
NotOnVoyagesTime = IsNull((IsNull
((SELECT SUM(Datediff(minute, voyages_port_arrive_port_time,
voyages_port_off_berth_time))
FROM HY_voyages_port ABC INNER JOIN
HY_voyages_not_business ABCD ON
ABC.ship_code = ABCD.ship_code AND
ABC.voyages_code = ABCD.voyages_code
WHERE ABC.ship_code = f.ship_code AND
ABC.voyages_code = f.voyages_code AND Datediff(minute,
voyages_not_business_event_start_time,
voyages_port_arrive_port_time) > 0 AND Datediff(minute,
voyages_port_off_berth_time,
voyages_not_business_event_end_time) > 0 AND
NOT voyages_port_off_berth_time IS NULL AND
voyages_port_off_berth_time <> '1900-1-1'), 0) + IsNull
((SELECT SUM(DateDiff(minute, voyages_not_business_event_start_time,
voyages_port_off_berth_time))
FROM HY_voyages_port ABC1 INNER JOIN
HY_voyages_not_business ABCD1 ON
ABC1.ship_code = ABCD1.ship_code AND
ABC1.voyages_code = ABCD1.voyages_code
WHERE ABC1.ship_code = f.ship_code AND
ABC1.voyages_code = f.voyages_code AND DateDiff(minute,
voyages_not_business_event_start_time,
voyages_port_arrive_port_time) <= 0 AND DateDiff(minute,
voyages_not_business_event_start_time,
voyages_port_off_berth_time) > 0 AND Datediff(minute,
voyages_port_off_berth_time,
voyages_not_business_event_end_time) > 0), 0) + IsNull
((SELECT SUM(DateDiff(minute, voyages_port_arrive_port_time,
voyages_not_business_event_end_time))
FROM HY_voyages_port ABC2 INNER JOIN
HY_voyages_not_business ABCD2 ON
ABC2.ship_code = ABCD2.ship_code AND
ABC2.voyages_code = ABCD2.voyages_code
WHERE ABC2.ship_code = f.ship_code AND
ABC2.voyages_code = f.voyages_code AND DateDiff(minute,
voyages_not_business_event_end_time,
voyages_port_arrive_port_time) < 0 AND DateDiff(minute,
voyages_not_business_event_start_time,
voyages_port_arrive_port_time) > 0 AND DateDiff(minute,
voyages_not_business_event_end_time,
voyages_port_off_berth_time) >= 0), 0) + IsNull
((SELECT SUM(voyages_not_business_time * 60)
FROM HY_voyages_port ABC INNER JOIN
HY_voyages_not_business ABCD ON
ABC.ship_code = ABCD.ship_code AND
ABC.voyages_code = ABCD.voyages_code
WHERE ABC.ship_code = f.ship_code AND
ABC.voyages_code = f.voyages_code AND Datediff(minute,
voyages_port_arrive_port_time,
voyages_not_business_event_start_time) >= 0 AND Datediff(minute,
voyages_not_business_event_end_time,
voyages_port_off_berth_time) >= 0), 0)), 0),
NotVoyagesNotBusinessTime = IsNull
((SELECT TOP 1 voyages_have_not_business_state_code
FROM HY_voyages
WHERE ship_code = a.ship_code AND
voyages_code < a.voyages_code
ORDER BY voyages_code DESC), 0)
FROM HY_voyages_port a INNER JOIN
HY_voyages f ON (a.ship_code = f.ship_code AND
a.voyages_code = f.voyages_code) INNER JOIN
HY_ship AA ON a.ship_code = AA.ship_code INNER JOIN
HY_port dd ON a.port_code = dd.port_code LEFT JOIN
HY_voyages_load c ON (a.ship_code = c.ship_code AND
a.voyages_code = c.voyages_code AND a.port_code = c.port_code) LEFT JOIN
HY_voyages_unload e ON (a.ship_code = e.ship_code AND
a.voyages_code = e.voyages_code AND a.port_code = e.port_code) LEFT JOIN
HY_goods_big_class d ON
e.goods_big_class_code = d .goods_big_class_code LEFT JOIN
HY_line b ON (Substring(b.line_code, 1, 3) = a.port_code AND
Substring(b.line_code, 4, 3) =
(SELECT TOP 1 c.port_code
FROM HY_voyages_load c
WHERE c.ship_code = a.ship_code AND
c.voyages_code = a.voyages_code
ORDER BY voyages_load_OK_time ASC))
WHERE ((Datediff(month, @endtime, DateAdd(month, CONVERT(INT,
voyages_statistic_kind), (SubString(voyages_month_code, 1, 4)
+ '-' + SubString(voyages_month_code, 5, 2) + '-01'))) <= 0 AND Datediff(month,
@starttime, DateAdd(month, CONVERT(INT, voyages_statistic_kind),
(SubString(voyages_month_code, 1, 4)
+ '-' + SubString(voyages_month_code, 5, 2) + '-01'))) >= 0)) AND
(@shipcode IS NULL OR
a.ship_code = @shipcode) AND (@voyageskind IS NULL OR
voyages_kind = @voyageskind)
ORDER BY a.ship_code, a.voyages_code, voyages_port_SN END GO
@endtime char(10), @shipcode char(3), @voyageskind char(1))
AS BEGIN IF @shipcode = '000'
SET @shipcode = NULL IF @voyageskind = '0'
SET @voyageskind = NULL
SELECT voyages_port_arrive_port_time AS ArriveTime,
voyages_port_off_berth_time AS LeaveTime, voyages_kind,
voyages_port_type_code, a.ship_code, a.voyages_code, ship_name,
a.voyages_port_SN, voyages_start_time AS StartTime,
AMile = ISNULL(b.Line_average_mileage, 0),
AMileLoad = ISNULL(b.Line_average_mileage, 0),
GoodsName = ISNULL(goods_big_class_name, ''), port_name,
MaxSN =
(SELECT MAX(e.voyages_port_SN)
FROM HY_voyages_port e
WHERE (e.ship_code = a.ship_code AND
e.voyages_code = a.voyages_code)),
Quantity = IsNull(voyages_unLoad_actuality_quantity, 0),
QuantityLoad = IsNull(voyages_Load_actuality_quantity, 0),
NotBusinessTime = IsNull
((SELECT SUM(IsNull(voyages_not_business_time, 0))
FROM HY_voyages_not_business
WHERE voyages_code = a.voyages_code AND ship_code = a.ship_code),
0), EndTime =
(SELECT TOP 1 voyages_unload_end_time
FROM HY_voyages_unload
WHERE voyages_code = a.voyages_code AND
ship_code = a.ship_code
ORDER BY voyages_unload_end_time DESC), UnloadPort =
(SELECT TOP 1 port_name
FROM HY_voyages_unLoad am INNER JOIN
HY_port bm ON am.port_code = bm.port_code
WHERE voyages_code = a.voyages_code AND ship_code = a.ship_code),
CJState =
(SELECT TOP 1 voyages_income_expend_CJ_state
FROM HY_voyages_income_expend
WHERE voyages_code = a.voyages_code AND ship_code = a.ship_code),
NotOnVoyagesTime = IsNull((IsNull
((SELECT SUM(Datediff(minute, voyages_port_arrive_port_time,
voyages_port_off_berth_time))
FROM HY_voyages_port ABC INNER JOIN
HY_voyages_not_business ABCD ON
ABC.ship_code = ABCD.ship_code AND
ABC.voyages_code = ABCD.voyages_code
WHERE ABC.ship_code = f.ship_code AND
ABC.voyages_code = f.voyages_code AND Datediff(minute,
voyages_not_business_event_start_time,
voyages_port_arrive_port_time) > 0 AND Datediff(minute,
voyages_port_off_berth_time,
voyages_not_business_event_end_time) > 0 AND
NOT voyages_port_off_berth_time IS NULL AND
voyages_port_off_berth_time <> '1900-1-1'), 0) + IsNull
((SELECT SUM(DateDiff(minute, voyages_not_business_event_start_time,
voyages_port_off_berth_time))
FROM HY_voyages_port ABC1 INNER JOIN
HY_voyages_not_business ABCD1 ON
ABC1.ship_code = ABCD1.ship_code AND
ABC1.voyages_code = ABCD1.voyages_code
WHERE ABC1.ship_code = f.ship_code AND
ABC1.voyages_code = f.voyages_code AND DateDiff(minute,
voyages_not_business_event_start_time,
voyages_port_arrive_port_time) <= 0 AND DateDiff(minute,
voyages_not_business_event_start_time,
voyages_port_off_berth_time) > 0 AND Datediff(minute,
voyages_port_off_berth_time,
voyages_not_business_event_end_time) > 0), 0) + IsNull
((SELECT SUM(DateDiff(minute, voyages_port_arrive_port_time,
voyages_not_business_event_end_time))
FROM HY_voyages_port ABC2 INNER JOIN
HY_voyages_not_business ABCD2 ON
ABC2.ship_code = ABCD2.ship_code AND
ABC2.voyages_code = ABCD2.voyages_code
WHERE ABC2.ship_code = f.ship_code AND
ABC2.voyages_code = f.voyages_code AND DateDiff(minute,
voyages_not_business_event_end_time,
voyages_port_arrive_port_time) < 0 AND DateDiff(minute,
voyages_not_business_event_start_time,
voyages_port_arrive_port_time) > 0 AND DateDiff(minute,
voyages_not_business_event_end_time,
voyages_port_off_berth_time) >= 0), 0) + IsNull
((SELECT SUM(voyages_not_business_time * 60)
FROM HY_voyages_port ABC INNER JOIN
HY_voyages_not_business ABCD ON
ABC.ship_code = ABCD.ship_code AND
ABC.voyages_code = ABCD.voyages_code
WHERE ABC.ship_code = f.ship_code AND
ABC.voyages_code = f.voyages_code AND Datediff(minute,
voyages_port_arrive_port_time,
voyages_not_business_event_start_time) >= 0 AND Datediff(minute,
voyages_not_business_event_end_time,
voyages_port_off_berth_time) >= 0), 0)), 0),
NotVoyagesNotBusinessTime = IsNull
((SELECT TOP 1 voyages_have_not_business_state_code
FROM HY_voyages
WHERE ship_code = a.ship_code AND
voyages_code < a.voyages_code
ORDER BY voyages_code DESC), 0)
FROM HY_voyages_port a INNER JOIN
HY_voyages f ON (a.ship_code = f.ship_code AND
a.voyages_code = f.voyages_code) INNER JOIN
HY_ship AA ON a.ship_code = AA.ship_code INNER JOIN
HY_port dd ON a.port_code = dd.port_code LEFT JOIN
HY_voyages_load c ON (a.ship_code = c.ship_code AND
a.voyages_code = c.voyages_code AND a.port_code = c.port_code) LEFT JOIN
HY_voyages_unload e ON (a.ship_code = e.ship_code AND
a.voyages_code = e.voyages_code AND a.port_code = e.port_code) LEFT JOIN
HY_goods_big_class d ON
e.goods_big_class_code = d .goods_big_class_code LEFT JOIN
HY_line b ON (Substring(b.line_code, 1, 3) = a.port_code AND
Substring(b.line_code, 4, 3) =
(SELECT TOP 1 c.port_code
FROM HY_voyages_load c
WHERE c.ship_code = a.ship_code AND
c.voyages_code = a.voyages_code
ORDER BY voyages_load_OK_time ASC))
WHERE ((Datediff(month, @endtime, DateAdd(month, CONVERT(INT,
voyages_statistic_kind), (SubString(voyages_month_code, 1, 4)
+ '-' + SubString(voyages_month_code, 5, 2) + '-01'))) <= 0 AND Datediff(month,
@starttime, DateAdd(month, CONVERT(INT, voyages_statistic_kind),
(SubString(voyages_month_code, 1, 4)
+ '-' + SubString(voyages_month_code, 5, 2) + '-01'))) >= 0)) AND
(@shipcode IS NULL OR
a.ship_code = @shipcode) AND (@voyageskind IS NULL OR
voyages_kind = @voyageskind)
ORDER BY a.ship_code, a.voyages_code, voyages_port_SN END GO少个TOP 1,改完再试试
CJState=( Select top 1 voyages_income_expend_CJ_state From HY_voyages_income_expend WHERE voyages_code=a.voyages_code AND ship_code=a.ship_code ),
你看看是不是
(SELECT voyages_income_expend_CJ_state
FROM HY_voyages_income_expend
WHERE voyages_code = a.voyages_code AND ship_code = a.ship_code), 问题出在这一行,返回多个值,可以用TOP 1 或 min、max聚合来解决。