2009-08-06 6 views
0

Использование Access 2003Как обновить нулевой столбец?

Две таблицы, Tmp_cardevent1, tmp_cardevent3

Query

SELECT AllPossibleCardEvents.PersonId, AllPossibleCardEvents.CardEventDate, Actual.Intime FROM ((SELECT p.PersonId, AllDates.CardEventDate FROM (SELECT DISTINCT CardEventDate FROM TMP_Cardevent3) AllDates, Tmp_cardevent1 p) AllPossibleCardEvents LEFT OUTER JOIN TMP_cardevent3 Actual ON AllPossibleCardEvents.PersonId = Actual.PersonId AND AllPossibleCardEvents.CardEventDate = Actual.CardEventDate) 

выход.

PERSONID CardEventDate Intime 
3156 05/08/2008 
3335 05/08/2008 
3405 05/08/2008 20:58:58 
3406 05/08/2008 
3410 05/08/2008 
3422 05/08/2008 
3424 05/08/2008 
3441 05/08/2008 
3447 05/08/2008 
3461 05/08/2008 
48 05/08/2008 
484 05/08/2008 
5 05/08/2008 
5008 05/08/2008 20:01:45 

Итак, на ...,

Для пустой колонки Интайма я хочу показать, как эту '-----'

Попробованной Query

SELECT PERSONID, CARDEVENTDATE, INTIME FROM 
(SELECT AllPossibleCardEvents.PersonId, AllPossibleCardEvents.CardEventDate, (iif(Actual.Intime=’’, ‘-----‘,Actual.Intime) as Intime FROM ((SELECT p.PersonId, AllDates.CardEventDate FROM (SELECT DISTINCT CardEventDate FROM TMP_Cardevent3) AllDates, Tmp_cardevent1 p) AllPossibleCardEvents LEFT OUTER JOIN TMP_cardevent3 Actual ON AllPossibleCardEvents.PersonId = Actual.PersonId AND AllPossibleCardEvents.CardEventDate = Actual.CardEventDate)) 

Но я не могу в состоянии для обновления нулевого столбца. Является ли структура доступной для столбца Intime.

Ожидаемый результат

PERSONID CardEventDate Intime 
3156 05/08/2008 ----- 
3335 05/08/2008 ----- 
3405 05/08/2008 20:58:58 
3406 05/08/2008 ----- 
3410 05/08/2008 ----- 
3422 05/08/2008 ----- 
3424 05/08/2008 ----- 
3441 05/08/2008 ----- 
3447 05/08/2008 ----- 
3461 05/08/2008 ----- 
48 05/08/2008 ----- 
484 05/08/2008 ----- 
5 05/08/2008 ----- 
5008 05/08/2008 20:01:45 

Как сделать запрос для этого нулевого столбца?

+0

Пожалуйста, прилагать больше усилий для форматирования коды, чтобы более читаемого состояние – AnthonyWJones

ответ

1

Вы можете использовать встроенную функцию IsNull.

SELECT 
    PERSONID, 
    CARDEVENTDATE, 
    INTIME 
FROM 
    (SELECT 
     AllPossibleCardEvents.PersonId, 
     AllPossibleCardEvents.CardEventDate, 
     (iif(iif(IsNull(Actual.Intime), '', Actual.Intime)='', '-----', Actual.Intime) as Intime 
    FROM ((SELECT 
     p.PersonId, 
     AllDates.CardEventDate FROM 
     (SELECT DISTINCT 
      CardEventDate FROM TMP_Cardevent3) AllDates, 
      Tmp_cardevent1 p) AllPossibleCardEvents 
     LEFT OUTER JOIN TMP_cardevent3 Actual 
     ON AllPossibleCardEvents.PersonId = Actual.PersonId AND 
     AllPossibleCardEvents.CardEventDate = Actual.CardEventDate)) 
+0

Почему бы не просто: IIF (Actual.Intime IS NULL, «-----», Actual.Intime), как Интайм; Кроме того, учитывая, что столбец будет принудительно применен к NVARCHAR (255), не было бы хорошей идеей явно форматировать DATETIME, например. iif (Actual.Intime IS NULL, '-----', FORMAT $ (Actual.Intime, 'hh: nn: ss')) как Intime; ? – onedaywhen

+0

Это преобразует значения «NULL» в тире, он также хочет преобразовать пустые строки в тире. Кстати, мы также можем использовать проверку «IS NULL». – Kirtan

+0

Почему бы не Nz? Nz (Actual.Intime, "") или лучше: Trim (Actual.Intime & "") = "" – Fionnuala

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