在连接派生表时获取“未为列1指定列”

时间:2014-01-26 07:23:05

标签: sql-server join

我正在撰写left join并获得

  

没有为第1列指定列“错误。

我做错了什么?

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

如果所有值都相同,我想返回code_value值,否则返回'' 我猜我还需要在我的选择查询中包含code4table.itemid但不确定如何。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:10)

您需要列别名(ALIASCOLUMN下方):

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

在您的情况下,ALIASCOLUMN名称应为itemid,以便匹配外部联接命名。

(因为您正在使用case / when派生一个新列,即使mycolumn中有一个命名列ELSE,Sql也不会将派生列名默认为this。如果这样做有意义,您可以保留相同的列名称(mycolumn)并更改最终ON以匹配。