HI这段代码工作正常,直到最后一句话还有更多内容,但是想知道我们是否可以了解这是不正确的。 这是在ibm i(as400)
' SQL0199关键字选择未选中。有效令牌:使用跳过等待获取订单联盟除了优化'你能解释一下这个问题吗?
SELECT COUNT(*)
FROM DLIB.ORDHEADR,DLIB.TRANCODE,DLIB.TRA11
WHERE OHCOM# = TSCOM# AND OHORD# = TSORD#
AND (otCOM# = OHCOM# AND OTORD#= OHORD# AND ottrnc = 'AQC')
AND OHORDT IN('RTR','INT','SAM')
AND OHREQD = replace(char(current date, iso), '-', '')
AND OHHLDC = ' '
AND ( ( TSTATS IN('AEP','SPJ')
AND OHORD# NOT in (SELECT a.TSORD#
FROM DLIB.TRANCODE a
WHERE a.TSTATS IN('EEP','SPC')
)
)
OR TSTATS IN('EEP','SPC')
AND OHORD# IN (SELECT DISTINCT(C.TSORD#)
FROM DLIB.TRANCODE C
JOIN (SELECT DISTINCT (B.TSORD#), MAX(B.TSUTIM) AS C_TSUTIM,
MAX(B.TSUDAT) AS C_TSUDAT
FROM DLIB.TRANCODE B
WHERE B.TSTATS IN ('EEP','SPC','ECM','ECT',
'ECA','CEL','BOC','COM',
'COO','REV','MCO','CPA',
'ECV','ECC','EPT','EPM',
'CAT','CAC','CAM','CAS',
'MAC','004','006','600',
'MEP','EPC','CPK')
GROUP BY B.TSORD#
) q1
ON C.TSORD# = q1.TSORD#
AND C.TSUDAT = q1.C_TSUDAT
AND C.TSUTIM = q1.C_TSUTIM
WHERE C.TSORD# NOT IN (SELECT F.TSORD#
FROM DLIB.TRANCODE F
WHERE F.TSTATS IN ('SPJ','REL','EAS','REV',
'STP','SPT','PPC','SPM',
'BPA','BPB','BPC','BPD','BPE',
'BPF','BPG','BPH','BPI','BPJ',
'BPK','BPL','BPM','BPN','CBM',
'BPO','BPP','BAT','BCM',
'BAM','WAT','WAM','LBL','012',
'006','600','004','SCP','CBA',
'CBB','CBC','CBD','CBE',
'CBF','CBG','CBH','CBI','CBJ',
'CBK','CBL','CBM','CBN','CBO',
'CBP','CBQ','CBR','CBS',
'CBT','CBU','CBV','CBW',
'CBX','CBY','CBZ','CB1',
'CB2','CB3','CB4','CB5')
)
AND C.TSTATS IN('EEP','SPC')
)
)
-- till here it's fine.
SELECT COALESCE(SUM(OdQty#),0)
答案 0 :(得分:1)
您需要GROUP BY
使用SUM
。
SELECT COALESCE(SUM(Goals),0) AS TeamGoals
FROM Players
GROUP BY TeamId
答案 1 :(得分:0)
格式化代码后,我们可以更好地看到语句的各个部分的开始和结束位置,我们可以看到与之匹配的内容。
一直到"直到这里它很好"是一个SQL SELECT语句。您需要一个分号来开始下一个查询,该查询以SELECT COALESCE()开头,但由于没有FROM子句,因此不完整。一旦你将终结符放在第一个语句上就应该运行。
第二个问题是另一个问题。您没有向我们展示其余的代码。正如TeKapa所说,任何时候使用聚合函数都需要GROUP BY子句。但是,如果您还在结果中包含非聚合列,则只需要这样做。
SELECT TeamID, COALESCE(SUM(Goals),0) AS TeamGoals
FROM Players
GROUP BY TeamId
这将为您提供玩家中的每个TeamID,以及每个团队的总目标。您可能还会包含ORDER BY TeamID
但是如果你只是想要所有玩家的总和,那么说完
是完全有效的SELECT SUM(Goals) AS TotalGoals
FROM Players
退一步看来,您的查询似乎变得如此复杂,即使您可能难以管理它。希望其他人不会被要求维持这样的事情。
如果此类代码投入生产,我建议您找到模块化复杂性的部分方法,例如使用视图或公用表表达式。将这些值列表存储在表中,而不是对它们进行硬编码也是一个好主意。