最佳性能SQL查询SSRS
我正在编写一份报告,我进退两难,不知该走哪条路才能获得更好的绩效 我有一张桌子在哪里最佳性能SQL查询SSRS,sql,sql-server,Sql,Sql Server,我正在编写一份报告,我进退两难,不知该走哪条路才能获得更好的绩效 我有一张桌子在哪里 COD | CTYPID | MNT 上面包含COD作为主键、类型和金额 报告将以列的形式包含每种类型。这意味着一个COD将为每个CTYPID设置3列 哪一个是最好的: 1- 然后我将这个表与我的主表左键联接,其中CTYPID=1 然后是另一个左连接,其中CTYPID=2,如此类推 2- 然后将上述内容与我的主表连接起来另一种选择是进行条件聚合: insert into #temp select co
COD | CTYPID | MNT
上面包含COD
作为主键、类型和金额
报告将以列的形式包含每种类型。这意味着一个COD
将为每个CTYPID
设置3列
哪一个是最好的:
1-
然后我将这个表与我的主表左键联接,其中CTYPID=1
然后是另一个左连接,其中CTYPID=2,如此类推
2-
然后将上述内容与我的主表连接起来另一种选择是进行条件聚合:
insert into #temp
select
cod,
sum(case when ctypid = 1 then mnt else 0 end) mnt_ctypid1,
sum(case when ctypid = 2 then mnt else 0 end) mnt_ctypid2,
sum(case when ctypid = 3 then mnt else 0 end) mnt_ctypid3
from mytable
group by cod
对于此查询,您需要
(cod,ctypid)
(可能已经存在,因为这似乎是或应该是表的主键)。当您测试这两种方法时,查看运行时并查看对系统的影响,您发现哪一种性能更好?“当我们没有表的DDL和对象的索引时,无法回答;或者知道正在处理的数据的大小。我建议你试试看,这就是我要找的。看起来很整洁,我可以使用一个查询来获取我需要的所有数据。谢谢你,实际上,在尝试了这个解决方案之后,它不会像预期的那样工作。我需要在组中包含ctypid,方法是使每个ctypid的结果分布在不同的行上。我发现最好在动态选择上多次加入,并在每次加入时获得每个ctypid的总数。我能够在不同的栏目中得到结果
--insert in a temp table on multiple columns
insert into #temp
(Select sum(amount) column1,CTYPID From table where CTYPID=1
Group by COD)
Left join (Select sum(amount)column2 ,CTYPID From table where CTYPID=2
Group by COD)
insert into #temp
select
cod,
sum(case when ctypid = 1 then mnt else 0 end) mnt_ctypid1,
sum(case when ctypid = 2 then mnt else 0 end) mnt_ctypid2,
sum(case when ctypid = 3 then mnt else 0 end) mnt_ctypid3
from mytable
group by cod