我已经减少查询以消除潜在的并发症,此外我已经验证字段是正确的。 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非法符号令牌。 42601字符,标记或子句无效或缺失。
有什么建议吗?我一直无法确定我可能会出现什么语法错误。
答案 0 :(得分:0)
那里有没有可能无法打印的奇怪特殊字符? http://www-01.ibm.com/support/docview.wss?uid=swg1IY43009 基本上听起来像一个奇怪的cr / lf或特殊的char?从* 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
答案 1 :(得分:0)
适用于z / OS的Db2版本7不支持OLAP功能或row_number()。您需要重写查询以避免使用此类函数。他们抵达后来的Db2版本。另请参阅其他人通过this link提供有关替代方案的提示。