-1

我一直在尝试加入两个临时表,但即使我使用了列别名,我也不断收到一条错误消息,上面写着“列名不明确”。仅供参考,这是 SQL Server 编程。

select ID, count(PageNum) as Frequency 
into temp_list
from ID_USA
group by ID

select ID, ISNULL(PageNum1,'') +','+ISNULL(PageNum2,'') +','+ISNULL(PageNum3,'') +','+ISNULL(PageNum4,'') +','+ISNULL(PageNum5,'') As PageNum
from temp_table k 
left join temp_list c on c.ID = k.ID

错误消息显示不明确的列名称“ID”。

有人可以帮忙吗?谢谢。

4

2 回答 2

3

id在两个表中,因此id查询中的不合格是模棱两可的 - 您的select子句中有它。

考虑在此列前加上表别名 - 因为您有left join,所以我选择了左表:

select k.ID, 
    concat_ws(',', c.pageNum1, c.PageNum2, c.pageNum3, c.pageNum4, c.pageNum5) As PageNum
from temp_table k 
left join temp_list c on c.ID = k.ID

pageNum基于它们来自正确表的假设,我还为所有列添加了前缀。

请注意,我将+字符串连接更改为concat_ws():虽然这与您的原始表达式不完全相同,但它足够接近(并且更简洁)值得提出建议。

于 2020-09-19T02:13:48.037 回答
0

首先,没有理由使用临时表,至少对于第一个查询。

其次,正如 GMB 指出的那样,您需要合格的列名。

第三,您可以使用该concat()函数更简单地精确复制您的逻辑(因为concat()忽略NULL值)。

所以,我建议:

with temp_list as (
      select ID, count(PageNum) as Frequency 
      from ID_USA
      group by ID
     )
select k.ID,
       concat(c.PageNum1, ',', c.PageNum2, ',', c.PageNum3, ',', c.PageNum4, ',', c.PageNum5) as PageNum
from temp_table k left join
     temp_list c
     on c.ID = k.ID;

请注意,查询中的每个列引用前面都有表别名。这种合格的列引用永远不会模棱两可。

当然,temp_list如果您有其他原因需要,您可以保留。但是您不需要此查询的临时表。

于 2020-09-19T12:30:56.403 回答