如何从两个表sql server中选择列

时间:2013-12-26 13:55:01

标签: sql sql-server-2008

我需要从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+'%' );

我犯了错误?

3 个答案:

答案 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

希望有所帮助......