2017-02-24 2 views
0

ich habe dies:SQL Zugriff IIF (aantal_instroom) als instroom

sql = "SELECT " & _ 
     "proces_id, " & _ 
     "proces_naam, " & _ 
     "voorraad, " & _ 
     "voorraad_te_laat, " & _ 
     "voorraad_verificatie, " & _ 
     "voorraad_verificatie_te_laat, " & _ 
     "teamplanning, " & _ 
     "teamplanning_verificatie, " & _ 
     "Iif(IsNull(teamplanning_totaal), 0, teamplanning_totaal) + Iif(IsNull(teamplanning), 0, teamplanning) AS totaal_teamplanning, " & _ 
     "Iif(IsNull(teamplanning_totaal_verificatie), 0, teamplanning_totaal_verificatie) + Iif(IsNull(teamplanning), 0, teamplanning_verificatie) AS totaal_teamplanning_verificatie, " & _ 
     "Round(Iif(IsNull(teamplanning), 0, (teamplanning * proces_normtijd * Iif(IsNull(productiviteit_factor), 1, productiviteit_factor))/60), 2) AS teamplanning_uren, " & _ 
     "Round(Iif(IsNull(teamplanning_verificatie), 0, (teamplanning_verificatie * proces_normtijd_verificatie * Iif(IsNull(productiviteit_factor), 1, productiviteit_factor))/60), 2) AS teamplanning_uren_verificatie, " 
    If IsNull(Datum) Then 
     sql = sql & "null AS verschil, " & _ 
      "null AS verschil_verificatie, " 
    Else 
     sql = sql & "Iif(IsNull(voorraad), 0, voorraad) - Iif(IsNull(teamplanning), 0, teamplanning) - Iif(IsNull(teamplanning_totaal), 0, teamplanning_totaal) AS verschil, " & _ 
      "Iif(IsNull(voorraad_verificatie), 0, voorraad_verificatie) - Iif(IsNull(teamplanning_verificatie), 0, teamplanning_verificatie) - Iif(IsNull(teamplanning_totaal_verificatie), 0, teamplanning_totaal_verificatie) AS verschil_verificatie, " 
    End If 
    sql = sql & "proces_normtijd, " & _ 
     "proces_normtijd_verificatie, " & _ 
     "Iif(IsNull(realisatie_cases), 0, realisatie_cases) AS realisatie_cases_aantal, " & _ 
     "Iif(IsNull(realisatie_cases_verificatie), 0, realisatie_cases_verificatie) AS realisatie_cases_aantal_verificatie, " & _ 
     "Iif(IsNull(ingeplande_cases), 0, ingeplande_cases) AS ingeplande_cases_aantal, " & _ 
     "Iif(IsNull(ingeplande_cases_verificatie), 0, ingeplande_cases_verificatie) AS ingeplande_cases_aantal_verificatie, " & _ 
     "volgorde, " 
    sql = sql & "Iif(IsNull(voorraad_gisteren), 0, voorraad_gisteren) AS instroom, " & _ 
     "Iif(IsNull(voorraad_verificatie_gisteren), 0, voorraad_verificatie_gisteren) AS instroom_verificatie " 
    sql = sql & "FROM tmp_planning_proces " & _ 
     "WHERE userid = '" & EscapeString(LCase(mod_global.RealUser)) & "' " & _ 
     "AND team_id = " & TeamID & " " & _ 
     IIf(IsNull(MedewerkerGroepID), "AND medewerker_groep_id is null ", "AND medewerker_groep_id = " & MedewerkerGroepID & " ") & _ 
     IIf(IsNull(Datum), "AND week = " & week & " AND jaar = " & jaar & " ", "AND datum = #" & Format(Datum, "yyyy-mm-dd") & "# ") & _ 
     "ORDER BY volgorde ASC " 

Was muss ich ändern ist:

„IIF (IsNull (voorraad_gisteren), 0, voorraad_gisteren) AS Instrumentierung ".

Es muss sein:

"IIF (IsNull (aantal_instroom), 0, aantal_instroom) AS instroom".

Das Problem ist, dass es von einer anderen Tabelle namens Instrum kommt. Die Abfrage, die ich machte mich nicht, und ich habe Abfrage Fähigkeiten begrenzt, so ich dies versucht:

"IIF (IsNull (Wählen aantal_instroom Von instroom), 0, aantal_instroom) AS instroom"

aber das geht nicht, plötzlich tauchen keine Daten mehr auf.

Weiß jemand, wie man das macht?

+0

Zuerst haben Sie die Tabelle 'Instrom' nicht in Ihre Abfrage aufgenommen, so dass SQL nichts über diese Tabelle oder Felder darin weiß. Zweitens, nachdem Sie diese Tabelle hinzugefügt haben, beachten Sie, dass Sie einem Feld einen Alias ​​gegeben haben und es 'Instroom' genannt haben, was für jeden, der dies betrachtet, verwirrend sein wird. –

+0

Da die obige Abfrage auf der Abfrage oder Tabelle 'tmp_planning_proces' basiert, enthält diese Abfrage/Tabelle das Feld, das Sie benötigen? –

Antwort

0

Zunächst einmal gibt es eine viel bessere Weise zu tun:

IIf(IsNull(voorraad_gisteren), 0, voorraad_gisteren) 

Es ist:

Nz(voorraad_gisteren, 0) 

nun Ihre Frage. Zuerst müssen Sie sicherstellen, dass die Tabelle instroom Teil Ihrer FROM Sektion der SQL-Anweisung ist. Beispiel:

FROM tmp_planning_proces INNER JOIN instroom ON ... [whatever fields link the two tables together] 

Dann können Sie zu jedem Feld auf dem Tisch wie folgt verweisen:

instroom.aantal_instroom 

IIf(IsNull(instroom.aantal_instroom), 0, instroom.aantal_instroom) AS instroom 

oder noch besser:

Nz(instroom.aantal_instroom,0) AS instroom 

Ich stimme auch mit der Bemerkung, dass die Verwendung derselben Feldalias als Tabellenname ist wahrscheinlich eine schlechte Idee und wird in der Zukunft Verwirrung stiften.