2009-08-06 16 views
0

Access 2003 MitWie aktualisiert man die Nullspalte?

Zwei Tabelle, Tmp_cardevent1, tmp_cardevent3

Abfrage

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) 

Ausgang.

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 

so weiter ...,

Für die Blank Intime Spalt Ich mag diese '-----' angezeigt werden soll

Versuchte Abfrage

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

Aber ich kann nicht in der Lage Um die Spalte Null zu aktualisieren, ist die Struktur für die Spalte Intime verfügbar

Erwarteter Ausgang

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 

Wie wird eine Abfrage für diese Nullspalte durchgeführt?

+0

Bitte mehr Anstrengungen unternehmen, um den Code zu formatieren, um einen besser lesbaren Zustand – AnthonyWJones

Antwort

1

Sie können die integrierte Funktion IsNull verwenden.

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

Warum nicht einfach: IIF (Actual.Intime IS NULL, '-----', Actual.Intime) als Intime; Wenn man bedenkt, dass die Spalte zu NVARCHAR (255) gezwungen wird, wäre es nicht eine gute Idee, das DATETIME z. if (Actual.Intime ist NULL, '-----', FORMAT $ (Actual.Intime, 'hh: nn: ss')) als Intime; ? – onedaywhen

+0

Dies wird nur die 'NULL' Werte in Bindestriche umwandeln, er will auch leere Strings in Bindestriche umwandeln. Übrigens können wir auch den 'IS NULL'-Check verwenden. – Kirtan

+0

Warum nicht Nz? Nz (Actual.Intime, "") oder besser: Trim (Actual.Intime & "") = "" – Fionnuala

Verwandte Themen