2009-08-06 27 views
0

使用Access 2003如何更新空列?

兩個表,Tmp_cardevent1,tmp_cardevent3

查詢

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 

...等,

對於空白銀泰專欄中,我要顯示這樣的 '-----'

試圖查詢

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)) 

但我不能能更新空列,該結構是否可用於銀泰專欄

預期輸出

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 2009-08-06 10:44:15

回答

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')); ? – onedaywhen 2009-08-06 14:37:00

+0

這隻會將NULL值轉換爲破折號,他還想將空字符串轉換爲破折號。順便說一句,我們也可以使用'IS NULL'檢查。 – Kirtan 2009-08-07 04:24:35

+0

爲什麼不是Nz? Nz(Actual.Intime,「」)或更好:修剪(Actual.Intime&「」)=「」 – Fionnuala 2009-08-07 09:15:22