1

Informix を使用していますが、集計関数内で CASE ステートメントを使用できません。常にエラーがスローされます (-201: 構文エラーが発生しました)。以下は私が使用しているクエリです。

select nvl(count(case when (ccd.contacttype =1 and ccd.contactdisposition =2) then (ccd.sessionid) else 0 end),'ELSED (att)') as calls 
from contactcalldetail ccd 
inner join agentconnectiondetail acd on ccd.sessionid=acd.sessionid

何が悪いのか説明できますか?

4

2 に答える 2

1

Informix 11.70 では、集約内で CASE が許可されます

次の SQL は、Mac OS X 10.7.5 上の Informix 11.70.FC6 (RHEL 5 上の 11.70.FC4 も) で機能します。

CREATE TEMP TABLE contactcalldetail
(
    contacttype        INTEGER NOT NULL,
    contactdisposition INTEGER NOT NULL,
    sessionid          INTEGER NOT NULL
);
CREATE TEMP TABLE agentconnectiondetail
(
    sessionid INTEGER NOT NULL
);

SELECT NVL(COUNT(CASE
                 WHEN (ccd.contacttype = 1 AND ccd.contactdisposition = 2)
                 THEN (ccd.sessionid)
                 ELSE 0 END),
           'ELSED (att)') AS calls 
  FROM contactcalldetail ccd 
  JOIN agentconnectiondetail acd ON ccd.sessionid = acd.sessionid;

Informix 11.50 以前では

-201 構文エラーが生成されるため、古いバージョンの Informix を使用していると推測できます。これはおそらく、新しいバージョンの Informix にアップグレードする必要があることを意味します。( Copilotのコメントからの情報に基づくと、Informix 11.50 はこの表記法をサポートしていないようです。サポートしているのは 11.70 だけです。)

Informix 11.70 を使用している場合は、使用しているバージョンと、それを実行しているプラ​​ットフォームを正確に文書化する必要があります。11.70.xC[4-7] の場合は、追跡すべきバグがある可能性があります。以前の場合は、使用しているバージョンがリリースされてからサポートが追加された可能性があります。リリース ノートを調べると、これを理解するのに役立つ場合があります。いつ発売されたかは調べていません。

COUNT が NULL を返すことはありますか?

COUNT が NULL を返す状況はないと思います。確かに、空のテーブルでは、上記のクエリの次のバリアントの出力は、すべての値に対してゼロを返します。したがって、NVL関数呼び出しは不要だと思います。

SELECT NVL(COUNT(CASE
                 WHEN (ccd.contacttype = 1 AND ccd.contactdisposition = 2)
                 THEN (ccd.sessionid)
                 ELSE 0 END),
           'ELSED (att)') AS calls,
       COUNT(*) AS count1,
       COUNT(CASE
             WHEN (ccd.contacttype = 1 AND ccd.contactdisposition = 2)
             THEN (ccd.sessionid)
             ELSE 0 END) AS count2
  FROM contactcalldetail ccd 
  JOIN agentconnectiondetail acd ON ccd.sessionid = acd.sessionid;
于 2013-02-11T18:39:51.583 に答える
0

私にはIDSのバグのようです。同様のクエリ(count関数にネストされたケース)を試しましたが、これにより、「when」キーワードで常に構文エラーが発生します。ただし、公式ドキュメントによると、これは機能するはずです。

于 2013-02-11T12:33:49.950 に答える