あなたのSQLは非常に珍しいです。Informix サーバーは、CASE 式が集計であるかどうかについて混乱しています。私もそうです。記述されているように、クエリを次のように書き直すのが最善です。
SELECT mymonth, Header1
FROM (SELECT MONTH(startdatetime) AS mymonth,
COUNT(somecolumn2) AS Header1
FROM MyTable
WHERE YEAR(startdatetime) = 2013
AND SomeColumn = 2
GROUP BY startdatetime
) AS x
-- GROUP BY Header1;
;
私が見ることができる(コメントアウトされた)外部レベルの GROUP BY 句には理由がありません。次のテスト データがあるとします。
CREATE TEMP TABLE MyTable
(
startdatetime DATE NOT NULL,
somecolumn INTEGER NOT NULL,
somecolumn2 VARCHAR(10)
);
INSERT INTO MyTable VALUES('2013-03-01', 2, NULL);
INSERT INTO MyTable VALUES('2013-03-02', 2, 'Elephant');
INSERT INTO MyTable VALUES('2013-03-03', 2, 'Rhinoceros');
INSERT INTO MyTable VALUES('2013-03-04', 1, 'Elephant');
INSERT INTO MyTable VALUES('2013-03-05', 3, 'Rhinoceros');
クエリの出力は次のとおりです。
mymonth header1
SMALLINT DECIMAL(15,0)
3 0
3 1
3 1
ただし、問題を説明するためにクエリの最小化を行ったのではないかと思います (そうであれば、ありがとうございます)。その場合、次の行に沿って CASE 式と集計を書き直す必要があります。
SELECT mymonth, Header1
FROM (SELECT MONTH(startdatetime) AS mymonth,
COUNT(CASE WHEN MyTable.somecolumn = 2 THEN somecolumn2 END) AS Header1
FROM MyTable
WHERE YEAR(startdatetime) = 2013
GROUP BY mymonth
) AS x
;
同じサンプル データの場合、次のようになります。
mymonth header1
SMALLINT DECIMAL(15,0)
3 2
11.70 または 12.10 の代わりに IBM Informix 11.50 を使用している場合、集計を行うには、これのバリエーションを使用する必要がある場合があります。
SELECT MonthNum, COUNT(Header1) AS Header1
FROM (SELECT MONTH(startdatetime) AS MonthNum,
CASE WHEN MyTable.somecolumn = 2 THEN somecolumn2 END AS Header1
FROM MyTable
WHERE YEAR(startdatetime) = 2013
) x
GROUP BY MonthNum;
出力:
monthnum header1
SMALLINT DECIMAL(15,0)
3 2
基本的な考え方は、CASE 式を使用して、サブクエリの Header1 列に必要な値を生成し、(サブクエリで集計するのではなく) サブクエリの結果に集計を適用することです。これが 11.50 で動作することは確認していません (11.70.FC6 では動作します) が、動作する可能性は十分にあります。