Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
最佳性能SQL查询SSRS_Sql_Sql Server - Fatal编程技术网

最佳性能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