我正在写一个 left join
并得到一个
我究竟做错了什么?
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
但不确定如何。先谢谢您的帮助。
最佳答案
您需要一个列别名(下面的 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 也不会默认派生列名称为此)。如果这样做有意义,您可以保留相同的列名( mycolumn
)并更改最终的 ON
以匹配。关于sql-server - 加入派生表时获取 “No column was specified for column 1",我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21360860/