【问题标题】:SQL Server JOIN adds results?SQL Server JOIN 添加结果?
【发布时间】:2011-03-04 13:59:46
【问题描述】:

我有一个基本上包含Person_ID, Action, TimeStamp 的表格,并且使用 Microsoft ReportBuilder 我有一个报告,其中列出了每个人及其操作的 COUNT。

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 中的一些内容,表 2 中的一些内容,你想要什么以及你得到什么?
  • 使用 SELECT DISTINCT 有效,但我仍然不明白是什么原因导致查询多次返回相同的行?它必须与 JOIN 语法有关。

标签: sql-server join


【解决方案1】:

做一个不同的

所以..

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' 

【讨论】:

  • 我使用了 SELECT DISTINCT ... 现在它可以工作了。原始查询导致多次返回相同的行是否有原因? COUNT部分全部由报表生成器完成,一列Action可以包含Action X、Action Y、Action Z,报表生成一个矩阵。
  • 是的,原因是你必须有一些数据连接到另一个表中的多个条目,所以如果你真的做了一个 SELECT * 你会注意到一切,除了少数或 1 列是不同的。当您进行 SUM 时,您是否按 PersonID 进行分组。在这种情况下,使用 SubQuery 来检索您加入的 DataSet,然后再进行 Group By 可能会很有用。也可以更快。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-21
  • 1970-01-01
  • 2019-02-16
  • 1970-01-01
  • 2016-05-24
  • 1970-01-01
相关资源
最近更新 更多