2013-11-04 125 views
1

我在我的项目中使用了两个表格。两张表都在图中显示。项目是在2005年VB.net和SQL Server 2005vb.net中group by子句有问题

enter image description here

这里是我的代码:

SELECT 
    NorthGangotri.DName, NorthGangotri.DLName, NorthGangotri.Place, 
    NorthGangotri.add1 , donor_family_detail.* 
FROM 
    NorthGangotri, donor_family_detail 
WHERE 
    NorthGangotri.NGCode = donor_family_detail.NGCode 
GROUP BY 
    donor_family_detail.NGCode 

但是当我尝试执行它给出以下错误

enter image description here

任何人都可以请帮助我。

SELECT DISTINCT NorthGangotri.DName, NorthGangotri.DLName, NorthGangotri.Place, 
NorthGangotri.add1 , donor_family_detail.* 
FROM NorthGangotri 
INNER JOIN donor_family_detail on NorthGangotri.NGCode = donor_family_detail.NGCode 

也应该使用join两个表连接:

+0

'GROUP BY donor_family_detail.NGCode'将为每个不同的'NGCode'值生成* 1 *行 - 但可以从* multiple *行派生,每个行对于DName,DLName,Place都有不同的值'等等。服务器不知道为其他列选择什么值。 –

+0

[踢坏的习惯:使用旧式JOIN](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style-joins。 aspx) - 老式*逗号分隔的表*样式列表已停止使用ANSI - ** 92 ** SQL标准(**超过20年**前) –

回答

1

在您查询,所以你或许应该删除group by条款你是不是聚合的任何数据。

+0

然后我如何隐藏重复值? –

+0

尝试'distinct'关键字[link](http://technet.microsoft.com/en-us/library/ms187831%28v=sql.105%29.aspx) – gzaxx

1

如果将Group By子句添加到查询中,则在SELECT列表中有一定的限制。它只能包含属于组或表达式集合的列。
第一个问题是,为什么您首先使用GROUP BY?您想在哪个方面对结果进行分组?然后在SELECT列表中添加想要分组的列,并根据需要添加聚合。

SELECT donor_family_detail.NGCodeNorthGangotri.DName, COUNT(*) 
FROM NorthGangotri, donor_family_detail 
WHERE NorthGangotri.NGCode = donor_family_detail.NGCode 
GROUP BY donor_family_detail.NGCode 

此返回行的(组合的表)由NGCode分组的数目。
请查看GROUP BY子句的文档。它包含几个有助于理解该主题的示例,并在将其转换为您正在尝试解决的问题时支持您。