0

次の無効なDB2クエリを書き直して、必要なものを取得する方法があるかどうかを知りたいです。

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が無効でした。有効なトークン:ROWROWSのエラー。

私の目標は、2番目のWITHステートメントpull_countを使用して、1番目のWITHステートメントpullのFETCH制限を設定することです。使用可能な行の半分だけをSELECTしようとしています。

助言がありますか?

4

1 に答える 1

2

あなたが見つけたように、FETCH FIRST句は式を使用できません。負でない整数のみを受け入れます。

これを行うきれいな方法はありませんが、OLAP 関数を使用することで可能です。これらは、DB2 のバージョンには存在しない可能性があります (DB2 for Linux/UNIX/Windows を使用している場合は、おそらく存在します)。

テーブルに列 email と name があると仮定します。

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 つはカウントを行い、もう 1 つは関心のある特定の行数を取得します。

于 2011-02-25T08:07:43.683 に答える