2013-11-28 4 views
0

Я хочу заменить нулевое значение 0, а если не null, я хочу подсчитать данные ??informix заменить нулевое значение 0 в select

sql = "SELECT b.start,COUNT(a.resourceid) " + 
     "FROM t1 b,agentconnectiondetail a "+ 
     "WHERE TO_CHAR(a.startdatetime,'%R') >= TO_CHAR(b.start,'%R') AND TO_CHAR(a.enddatetime,'%R') <= TO_CHAR(b.finish,'%R') " + 
     "AND a.resourceid = '"+dr[1].ToString()+"'" + 
     "GROUP BY 1 ORDER BY 1"; 

, что результаты запроса является недействительным

что я должен делать ??

+0

луиджи ваш результат ответ ERROR [ 42000] [Informix] [Informix ODBC Driver] [Informix] Произошла синтаксическая ошибка. –

+0

Используйте NVL: 'COUNT (NVL (a.resourceid, 0))' – ceinmart

ответ

1

Сначала вы должны создать простой запрос с простой таблицей db, некоторые значения и запрошенный результат, который четко показывает вашу проблему.

Часть 1: Я хочу, чтобы заменить нулевое значение с 0

Чтобы изменить NULL в какое-то значение, которое вы можете использовать NVL() функции. Документация говорит: Выражение NVL возвращает разные результаты, в зависимости от того, оценивает ли его первый аргумент значение NULL.

Примеры:

SELECT fld, NVL(fld, 0) FROM ... 

Часть 2: и если не нулевой я хочу считать данные

SELECT COUNT(*) FROM ... WHERE fld IS NOT NULL 
0

ли начать и закончить обе даты-времени типа данных? Если они DATE, то% R (HH: MM), вероятно, бессмысленно.

Если они DATETIME, то почему бы не

SELECT b.start,COUNT(a.resourceid) " + 
    "FROM t1 b,agentconnectiondetail a "+ 
    "WHERE startdatetime >= b.start AND a.enddatetime <= b.finish" + 
    "AND a.resourceid = '"+dr[1].ToString()+"'" + 
    "GROUP BY 1 ORDER BY 1"; 

Если старт и финиш даты, то вы всегда можете продлить(), чтобы быть один и тот же startdatetime и enddatetime

Смежные вопросы