我必须加入十几个表格才能获得SSRS报告所需的特定字段。其中一个必要的表连接也会添加“重复”记录。
就DB而言,记录当然不是重复的,因为一个字段使它们成为唯一的。所以我创建了一个关于我的主查询的tmp表,并没有包含那个邪恶的字段(我将配音D列) - 这个查询让我知道了结。
我相信这会让我的任务变得简单。
我的临时表现在只有以下(匿名):
SELECT DISTINCT
jt.A [ColumnA]
,jt.B [ColumnB]
,jt.C [ColumnC]
,COUNT(*) [TotalCount]
INTO
#CountsTbl
FROM
#JoinsTbl jt
GROUP BY
jt.A
,jt.B
,jt.C
当我将此表与另一个表连接以查看结果时,Count仍然是错误的,即使D列未包含在tmp表中且我使用了D,但是A,B,C中具有相同数据的任何记录都是重复的选择DISTINCT。
+---------+------------+------------+---------+------------+
| ColumnA | ColumnB | ColumnC | ColumnD | TotalCount |
+---------+------------+------------+---------+------------+
| 0123 | 01/01/2016 | 01/31/2016 | ABC | 1 |
+---------+------------+------------+---------+------------+
| 0123 | 02/01/2016 | 02/28/2016 | ABC | 2 |
+---------+------------+------------+---------+------------+
| 0123 | 02/01/2016 | 02/28/2016 | XYZ | 2 |
+---------+------------+------------+---------+------------+
我缺少的逻辑是逃避我,我一直在研究这个问题,我想我还需要其他一些眼睛来看待它。在上面的例子中,这是我加入时得到的,即使COUNT已经在前面的tmp表中完成了。第一行有正确的计数,第二行和第三行我只想计数为1,因为我不希望COUNT看D列,只是A-C。
我正在使用SQL Server 2014
这是我的第一篇文章,如果我需要提供更多信息,请告诉我。我没有成功找到有意义的答案 - 也许我在问错误的问题。
由于
答案 0 :(得分:0)
我知道这可能不是非常有用,因为我没有时间详细讨论查询等等 - 但我确实找到了自己解决问题的方法。
我的主要tmp表(我没有在这里发布)有许多复杂的连接 - (需要清理以提高性能),然后是几个连接到聚合的tmp表。这3个tmp表连接到我的主查询,以显示我需要的SSRS报告结果。有8个用户参数,3个是可选的,但报告的字段是固定的,导致我的大部分头痛。
我最终做的是删除' ColumnD'从第一个大型tmp表中执行该表上的SELECT DISTINCT。
下一个tmp表是我在我的问题中模拟的那个。我能够得到准确的'经过上述变更后的计数。我使用引号因为所有的COUNTS都是1,因为ColumnB和C是日期,它们使每一行都是唯一的。毋庸置疑,这是朝着正确方向迈出的一步。
我删除了日期字段(我把它们放在那里只是为了能够看到我是否得到了重复项)并从上面的tmp表中加入了2个表中的2个表中的键,下面是模拟的它是如何工作的:
SELECT
jt.FKEY1 [AccountKEY]
,jt.FKEY2 [CodeKEY]
,COUNT(*) [TotalCount]
--INTO
-- #CountsTbl
FROM
#JoinsTbl jt
GROUP BY GROUPING SETS
(jt.AccountKEY)
,(jt.CodeKEY)
ORDER BY
jt.CodeKEY
,jt.AccountKEY
生成的tmp表有我需要的COUNT。
感谢那些提出问题的人 - 特别感谢我阅读的许多匿名其他帖子,以帮助他们研究此查询
答案 1 :(得分:0)
您在第2行和第3行中排名第2,因为这是ABC的值为0123 | 02/01/2016 | 02/28/2016
的行数
为避免这个问题,您有两种选择:
D
中,您将始终拥有1(除非所有4列都重复。)D
,或使用MIN / MAX等聚合。