【问题标题】:DB2 count(*) over(partition by fieldname) giving -104 z/OS version 7DB2 count(*) over(partition by fieldname) 给出 -104 z/OS 版本 7
【发布时间】:2011-01-20 07:17:58
【问题描述】:

我已精简查询以消除潜在的复杂性,此外我已验证字段是否正确。 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 字符、标记或子句无效或缺失。

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

【问题讨论】:

  • 你确定那个版本支持窗口函数吗? V7 真的非常老了(仍然有手册可用的最旧版本是 V8,我在那里找不到任何关于窗口函数的参考)

标签: sql db2 window-functions


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    里面有什么奇怪的特殊字符可能无法打印吗? 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
    

    【讨论】:

    • 我没有从 unix 过渡到 windows。我完全呆在窗口中,删除这些行让查询运行。我会调查特殊字符问题,但据我所知,那里不应该发生任何奇怪的事情。
    • 您删除了哪些行以使其运行? “并删除行让查询运行”..
    • 我也可以在我的 db2 (9.something) 版本上重新创建错误,这似乎是让我感到悲痛的“count() over (partition by”),如果我将其更改为使用 row_number() over() 作为 rownum,它将起作用... rownumber 函数是否会为您提供与 count() 类似的信息,看起来会吗?
    • count(*) over(partition by STDINSTRCD),是我提到的那一行。我会试试 row_number
    • Row_number 有同样的问题。请注意,我需要避免按各个字段进行分组,因为我需要使用窗口函数来完成我正在尝试做的事情。
    猜你喜欢
    • 2021-12-15
    • 2019-10-22
    • 2021-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-05
    • 1970-01-01
    相关资源
    最近更新 更多