我很想知道是否有办法重写以下无效的DB2 Query以获得我需要的东西:
WITH pull AS (
SELECT *
FROM email_list
),
pull_count AS (
SELECT count(email) as email_count
FROM email_list
)
SELECT *
FROM pull
FETCH FIRST integer(email_count / 2) ROWS ONLY
我得到'令牌INTEGER无效。有效令牌:ROW ROWS'错误。
我的目标是使用第二个WITH语句pull_count来设置第一个WITH语句的FETCH限制pull。我只想查看SELECT的一半可用行。
有什么建议吗?
答案 0 :(得分:2)
如您所见,FETCH FIRST子句不能使用表达式。它只接受一个非负整数。
没有一种方法可以做到这一点,但可以使用OLAP函数。这些可能不存在于您的DB2版本中(如果您使用的是DB2 for Linux / UNIX / Windows,那么它们可能就在那里)。
假设您的表中包含电子邮件列和名称:
with pull as (
select
email,
name,
rownumber() over(order by email) as row,
count(email) over () as cnt
from
email_list
)
select
email,
name
from
pull
where
row <= cnt/2;
这可能表现不佳;实际上,简单地执行2个查询可能更有效 - 1个执行计数,另一个获取您关注的特定行数。