SQL Server JOIN添加结果?

问题描述:

我有一个表基本上包含Person_ID, Action, TimeStamp并使用Microsoft ReportBuilder我有一个报告,其中每个人和他们的行动COUNT表。SQL Server JOIN添加结果?

Person  Action X  ActionY 
1    3    5 
2    0    4 

现在我需要过滤结果只显示在某一群人被含有PERSON_ID,GROUP_ID另一个表中定义。

当我根据Group_ID = x进行JOIN和筛选结果时,计数​​非常高,尽管它的筛选是正确的。

我在SQL Server管理器中手动运行查询,并且它多次返回同一行?

编辑:

我现在的SQL是

select t1.personid, t1.action, t2.personid, t2.groupid 
from t1 
inner join t2 on t1.personid = t2.personid 
where t2.groupid = 1 

这将返回各行多次,忘记计数的部分,因为这是在报表生成器,我想明白为什么会返回同一行这是多次破坏报告的原因。

+1

什么是查询? – Blorgbeard 2011-03-04 14:02:37

+0

显示你有什么。 – 2011-03-04 14:02:50

+0

你能展示一些示例数据吗?即表1中的一些内容,表2中的一些内容,你想要的和你得到的内容? – DForck42 2011-03-04 14:19:34

做DISTINCT

所以..

SELECT PersonID, ActionX = COUNT(distinct varname), ActionY = SUM(distint varname) 
FROM tblName1 a 
INNER JOIN tblName2 b ON a.PersonID = b.PersonID 
WHERE b.Group_ID = 'groupvar' 
+0

我使用了SELECT DISTINCT ...现在它可以工作。是否有原因导致原始查询导致多次返回相同的行? COUNT部分全部由报告生成器完成,有一列Action可以包含Action X,Action Y,Action Z,报告生成矩阵。 – MattP 2011-03-04 14:24:42

+0

是的原因是因为你必须有一些数据已经连接到另一个表中的多个条目,所以如果你真的做了SELECT *,你会注意到所有的东西,除了少数或1列是不同的。当你在做你的SUM时,你是GROUPING By PersonID。在这种情况下,使用SubQuery来检索连接的DataSet,然后再做Group By可能会很有用。也可以更快。 – 2011-03-04 14:27:31