2014-01-26 2 views
6

Ich bin ein left join zu schreiben und einebekommt „Keine Spalte für Spalte 1" angegeben wurde, wenn eine abgeleitete Tabelle Beitritt

Keine Spalte für Spalte 1" Fehler immer angegeben wurde.

Was mache ich falsch?

LEFT JOIN 
(
    SELECT CASE WHEN COUNT(*) > 1 THEN '' ELSE mycolumn END 
    FROM 
    (
     SELECT code_value 
     FROM allocation 
     WHERE allocation.id='[val]' 
     GROUP BY code_value 
    ) grp 
    GROUP BY code_value 
) AS code4table 
ON code4table.itemid = table1.id 

Ich mag code_value Wert zurückgeben, wenn alle Werte gleichen sonst return ‚‘ sind Ich vermute, ich muß auch die code4table.itemid in meiner Auswahlabfrage bin aber nicht sicher, wie.

Vielen Dank im Voraus für die Hilfe.

+0

Sorry, es ist SQL. – Mithil

+0

@Mithil: "SQL" ist ** nicht ** ein DBMS-Produkt. Es ist * Abfragesprache. "Postgres, Oracle, Firebird, DB2 .... sie alle verwenden" SQL ". Wir können sehen, dass Sie SQL wegen des Codes verwenden, den Sie gepostet haben. Aber wir müssen wissen, welches DBMS Sie verwenden. –

+0

Okay, SQL Server. – Mithil

Antwort

9

Sie müssen eine Spalte Alias ​​(ALIASCOLUMN unten):

LEFT JOIN (
    SELECT CASE WHEN COUNT(*) > 1 THEN '' ELSE mycolumn END AS ALIASCOLUMN 
    FROM 
    ... 
) AS ALIASTABLE 
ON ALIASTABLE.ALIASCOLUMN = outertable.column 

In Ihrem Fall ALIASCOLUMN Name itemid sein sollte, um die äußere übereinstimmen Namensgebung beizutreten.

(Weil Sie eine neue Spalte mit dem Fall Ableitung/wenn, auch wenn Sie eine benannte Spalte mycolumn im ELSE hat, Sql wird die abgeleitete Spaltennamen nicht Standard). Wenn dies sinnvoll ist, können Sie den gleichen Spaltennamen (mycolumn) beibehalten und den endgültigen ON entsprechend ändern.

Verwandte Themen