Эта часть запроса в предложениях HAVING и GROUP BY создает проблемы:
IIf(DLookUp("type",
"jcchangeorderstep",
"jobnum = ' [jcchangeorder].[jobnum] ' and
ordernum = ' [ordernum] ' and
Type = 20")=20,-1,0))=0);
Это запутанно и очень трудно читать. Но он говорит: «Если это задание и порядок появляются в JCCHANGEORDERSTEP с типом 20, исключите его». Вот что вам нужно исправить.
Весь запрос, вероятно, должен быть исправлен различными способами. Но я думаю, что это может привести вас туда, куда вам нужно.
strSQL = "SELECT DISTINCT Sum(jcdetail.cost) AS SumOfcost " & _
"FROM jcchangeorder " & _
"INNER JOIN jcdetail " & _
"ON (jcchangeorder.ordernum = jcdetail.ponum) " & _
"AND (jcchangeorder.jobnum =jcdetail.jobnum) " & _
"GROUP BY jcdetail.jobnum, " & _
"jcdetail.type, " & _
"jcchangeorder.type, " & _
"DLookUp(""type"",""jcchangeorderstep"",""jobnum = '"" & [jcchangeorder].[jobnum] & ""' and ordernum = '"" & [ordernum] & ""' and Type = 1"") " & _
"HAVING (jcdetail.jobnum='" & strJ & "' AND " & _
"jcdetail.type=19 AND " & _
"jcchangeorder.type <> 2) AND " & _
"DLookUp(""type"",""jcchangeorderstep"",""jobnum = '"" & [jcchangeorder].[jobnum] & ""' and ordernum = '"" & [ordernum] & ""' and Type = 1"")=1;"
То, что я сделал, сменилось условием: «Если это задание и порядок отображаются в JCCHANGEORDERSTEP с типом 1, включите его». Не видя ваших данных и не тестируя код самостоятельно, я не могу обещать, что это сработает. Могут быть некоторые опечатки, поэтому я объяснил, что я пытаюсь сделать, чтобы вы могли их исправить.
Кроме того, потратьте некоторое время, чтобы пройти тур Stack Overflow. Это сообщество может оказать большую помощь, если вы работаете с ним.
Попробуйте:
После обсуждения желаемых результатов с ОП выясняется, что это будет лучшим решением. Он дает сумму всех заказов на изменение, которые только имеют шаг заказа на изменение PENDING
.
strSQL = _
"SELECT SUM(JCD.cost) AS sumofcost " & _
"FROM jcchangeorder JCCO " & _
"INNER JOIN jcdetail JCD " & _
"ON JCCO.ordernum = jcd.ponum " & _
"AND JCCO.jobnum = jcd.jobnum " & _
"INNER JOIN (SELECT JCCOS.ponum, " & _
"JCCOS.jobnum " & _
"FROM jcchangeorderstep JCCOS " & _
"GROUP BY JCCOS.ponum, " & _
"JCCOS.jobnum " & _
"HAVING Count(*) = 1 " & _
"AND First(JCCOS.type) = 1) JCSELECT " & _
"ON JCCO.ordernum = JCSELECT.ponum " & _
"AND JCCO.jobnum = JCSELECT.jobnum " & _
"GROUP BY JCD.jobnum, " & _
"JCD.type, " & _
"JCCO.type "
"HAVING JCD.jobnum='" & strJ & "' AND " & _
"JCD.type=19 AND " & _
"JCCO.type <> 2;"
JCCO, JCCOS и JCD - псевдонимы SQL. SQL понимает их. JCSELECT является псевдонимом подзапроса. JCSELECT создает набор всех заданий / заказов, которые имеют только шаг PENDING.