DB2 count(*)over(partition by fieldname)给出-104 z / OS版本7

时间:2010-02-23 22:30:21

标签: sql db2 window-functions

我已经减少查询以消除潜在的并发症,此外我已经验证字段是正确的。 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字符,标记或子句无效或缺失。

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

2 个答案:

答案 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提供有关替代方案的提示。