2017-04-24 1 views
0

Ich möchte nur den Wert einer Tabelle "b" erhalten, wenn Tabelle "a" Wert ist "-" Wenn der Wert an Tabelle "b" leer ist, dann erhalten Sie den Wert der Tabelle " ein“, auch wenn es‚-‘MS Access Abfrage mit CASE-Anweisung

Microsoft Access sagt:‚Fehlender Operator‘mit dieser Abfrage:

 SELECT ts.data_generacio, 
     ts.estat, 
     ts.exercici, 
     Month(tsl.data) AS Mes, 
     Day(tsl.data) AS Dia, 
     tsl.data, 
     tsl.cod_treb, 
     t.nom_treb, 
     tsl.hores, 
     p.cod_proj, 
     p.acronim  AS nom_proj, 
     j.justificacio, 
     tsl.timesheet_id, 
     p.ref, 
     CASE WHEN tsl.activitat != '' THEN tsl.activitat ELSE ts.activitat END AS Activitat 
FROM timesheet_lines AS tsl 
     LEFT JOIN timesheets  AS ts 
     ON tsl.timesheet_id = ts.id 
      LEFT JOIN treballadors AS t 
      ON tsl.cod_treb = t.cod_treb 
       LEFT JOIN justificacions AS 
       ON ts.id_justificacio = j.id 
        LEFT JOIN projectes AS p 
        ON j.cod_proj = p.cod_proj; 

ich denke, der Fehler auf der CASE-Ausdruck Linie ist.

+0

Das ist ein Fall _expression_, nicht Statement ... – jarlh

+1

Entfernen eine Zeile zu der Zeit, um zu finden, wenn der Fehler verschwindet. – jarlh

+0

Hat nicht geholfen .... –

Antwort

0

MS Access unterstützt keine CASE Anweisungen. Verwenden Sie IIF:

IIF(tsl.activitat <> '', tsl.activitat, ts.activitat) AS Activitat 

Ich bin nicht sicher, ob Zugang entweder Aliase auf LEFT JOIN unterstützt, aber es wahrscheinlich macht

Hinweis (obwohl korrekt markiert), könnte der Titel Ihrer Frage lästig sein ... die meisten Menschen beziehen sich beim Schreiben von "MS SQL" auf Transact-SQL (TSQL). Transact-SQL wird von MS SQL Server verwendet, aber nicht von MS Access, das seinen eigenen SQL-Dialekt verwendet ("Access SQL" genannt und im Vergleich ziemlich eingeschränkt).