0

我已经精简了查询以消除潜在的复杂性,此外我已经验证了这些字段是正确的。DB2 UDB zSeries V7 是我的 db2 版本。

SELECT 
    STDINSTRCD, 
    COUNT(*) OVER(PARTITION BY STDINSTRCD),
    CAST(STDINSTRDESC AS VARCHAR(1000)) AS INSTR,
    C.STDINSTRSEQ,
    1
FROM 
    SYST.SCC004 C
WHERE  
    C.STDINSTRCD = '098'

我也尝试过子查询。

select 
 H2.FRSTSTDINSTRCD,
 (select count(*) from SYST.scC004 Ci where '098'=Ci.STDINSTRCD) as cnt, 
 cast(STDINSTRDESC as varchar(1000)),
 C.STDINSTRSEQ,
 1
from SYST.scE4A00 H2
 LEFT OUTER JOIN SYST.scC004 C
 ON C.STDINSTRCD = H2.FRSTSTDINSTRCD
 WHERE
  H2.CTLENTYID='MCS'
  AND H2.VCKVAL='12654'
  AND H2.POKVAL='0198617S12 000  000'

收到的错误是 om.ibm.db2.jcc.b.SqlException: DB2 SQL 错误: SQLCODE: -104, SQLSTATE: 42601, SQLERRMC: (;, FROM INTO sqlcode sqlstate -104 Illegal Symbol token. 42601 A character, token , or 子句无效或缺失。

有什么建议吗?我一直无法确定我可能会犯什么语法错误。

4

2 回答 2

0

那里有没有可能无法打印的奇怪特殊字符? http://www-01.ibm.com/support/docview.wss?uid=swg1IY43009 基本上听起来像一个奇怪的 cr/lf 或特殊字符?从 *nix 到 windows 的任何复制粘贴?

另外,我不确定你为什么需要分区?一个小组会不会完成你的目标。(看起来您只是在计算符合您条件的行数)......对于您的第一个查询是这样的吗?

SELECT 
 STDINSTRCD, 
 count(1) ,
 CAST(STDINSTRDESC AS VARCHAR(1000)) AS INSTR,
 C.STDINSTRSEQ,
 1
FROM SYST.SCC004 C
WHERE  C.STDINSTRCD = '098'
group by 
STDINSTRCD, 
CAST(STDINSTRDESC AS VARCHAR(1000)) AS INSTR,
C.STDINSTRSEQ,
1
于 2010-02-23T22:44:21.233 回答
0

适用于 z/OS 的 Db2 版本 7 不支持 OLAP 函数或 row_number()。您需要重写查询以避免使用此类函数。它们出现在更高的 Db2 版本中。还可以通过此链接查看其他人关于替代品的提示。

于 2017-10-16T06:40:42.923 回答