我需要从sql server 2008中的两个不同的表中选择三列。我尝试了下面的查询,但它的显示错误是这样的
错误消息
Column 'tb_new_product_Name_id.Product_Name' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
查询
select pn.Product_Name as [Product Name], pn.Product_Id as [Product Id],COUNT(pnd.Product_id)+1 as duplicate_id
from tb_new_product_Name_id as pn,tb_new_product_Name_id_duplicate as pnd
where pn.Product_Name LIKE '%'+@product_name_id+'%'
or (pn.Product_Id like '%'+@product_name_id+'%' and pnd.Product_Id like '%'+@product_name_id+'%' );
我犯了错误?
答案 0 :(得分:1)
如果您的select语句中有count
,则必须在其他列上进行分组
select pn.Product_Name as [Product Name], pn.Product_Id as [Product Id],COUNT(pnd.Product_id)+1 as duplicate_id
from tb_new_product_Name_id as pn
,tb_new_product_Name_id_duplicate as pnd
where pn.Product_Name LIKE '%'+@product_name_id+'%'
or (pn.Product_Id like '%'+@product_name_id+'%' and pnd.Product_Id like '%'+@product_name_id+'%' );
group by pn.Product_name, pn.Product_ID
您还应该考虑使用explicit join语法
答案 1 :(得分:1)
您正在使用aggregate function COUNT,因此您需要按照不属于聚合的其他列进行分组。
试试这个:
select pn.Product_Name as [Product Name], pn.Product_Id as [Product Id],COUNT(pnd.Product_id)+1 as duplicate_id from tb_new_product_Name_id as pn,tb_new_product_Name_id_duplicate as pnd
where pn.Product_Name LIKE '%'+@product_name_id+'%' or (pn.Product_Id like '%'+@product_name_id+'%' and pnd.Product_Id like '%'+@product_name_id+'%' )
group by pn.Product_Name, pn.Product_Id;
答案 2 :(得分:1)
当您选择具有聚合函数(如count)的任何列时,您需要使用 GROUPBY 。
请尝试以下查询:
select pn.Product_Name as [Product Name], pn.Product_Id as [Product Id],COUNT(pnd.Product_id)+1 as duplicate_id from tb_new_product_Name_id as pn,tb_new_product_Name_id_duplicate as pnd where pn.Product_Name LIKE '%'+@product_name_id+'%' or (pn.Product_Id like '%'+@product_name_id+'%' and pnd.Product_Id like '%'+@product_name_id+'%' ) Group by pn.productname,pn.ProductID
希望有所帮助......