2017-12-22 11 views
2
gebunden werden können

ich ein INNER JOIN schreibe, die Felder wie CompanyID etc hinzugefügt ..SQL Case-Anweisung mit SELECT innerhalb INNER JOIN. Fehler von mehrteiligen nicht

Aber in meine CASE innerhalb der INNER JOIN ich einen Fehler nach der WHERE

Die Störung erhalten sagen auf dem IR.MyId und ICB1.MyId

"mehrteilige Bezeichner nicht sein könnte gebunden" Meine Absicht für diese Abfrage ist, eine CASE innerhalb der INNER JOIN hinzuzufügen.

Also die erste Spalte ist A.CompanyId. Die zweite Spalte wird die CASE-Anweisung sein, um zu überprüfen, ob die ID in einer anderen Tabelle vorhanden ist. Wenn nicht, wird es eine weitere SELECT Anweisung, ELSE nur MyID tun.

Aber ich bekomme einen Fehler auf der SELECT COUNT(*) innerhalb der CASE WHEN.

Jede Hilfe wird geschätzt. Vielen Dank.

INNER JOIN 
    (SELECT DISTINCT 
     A.CompanyId, 
     CASE 
      WHEN (SELECT count(*) 
        FROM Table1 IBC1 
        WHERE IR.MyId = ICB1.MyId) == 0 
       THEN 1 
       ELSE 0 
     END 
    FROM 
     cmp.CompanyNews A) E ON NP.CompanyId = E.CompanyId 
+1

'Fall, wenn (SELECT COUNT (*) FROM Tabelle1 IBC1 WHERE IR .MyId = ICB1.MyId) == 0 'ersetzen' == 'mit' = ' – Hadi

+0

versuchen, hinzufügen und Bezeichner für Ihren Fall:' DANN 1 sonst 0 END als NameOfIdentifier' –

+0

@John bitte geben Sie die vollständige Abfrage, fügen Sie auch die Tag für das von Ihnen verwendete RDBMS (sql-server, oracle, ...) – Hadi

Antwort

0

Ich habe Ihre vollständige Abfrage nicht, aber wenn es rentabel ist würde ich den folgenden Ansatz dazu nehmen:

... 
    CASE 
     WHEN ICB1_ID.ID IS NULL 
     THEN 1 
     ELSE 0 
    END [ColumnName] 
FROM 
    ... 
    INNER JOIN 
     (
      SELECT DISTINCT A.CompanyId 
      FROM cmp.CompanyNews A 
     ) E 
    ON NP.CompanyId = E.CompanyId 
    OUTER APPLY 
     (
      SELECT TOP 1 ICB1.MyID ID 
      FROM Table1 IBC1 
      WHERE ICB1.MyId = IR.MyId 
     ) ICB1_ID