我知道这个问题在这里经常被问到,但我有一些不同的要求。SQL Server 2008 R2中的查询优化
我想得到这个输出。我也在用我的逻辑解决这个问题,但是这可以通过更简单和优化的方式来完成。更快地运行此查询。
这里是我的查询:
select
ISNULL('PortFolio Code: '+a.CPORTFOLIOCODE,'Grand Total') as [PortFolio Code],
COUNT(SZCUSTOMERNO) as [Accounts],
CAST(COUNT(SZCUSTOMERNO) * 100/(Select COUNT(SZCUSTOMERNO)
from dbo.COL_TRN_AGREEMENT)
as nvarchar(50))+' %' as [%],
sum(case when a.SZBUCKETCODE =1 then a.FOSAMT else 0 end) as [Bucket :1],
sum(case when a.SZBUCKETCODE =2 then a.FOSAMT else 0 end) as [Bucket :2],
sum(case when a.SZBUCKETCODE =3 then a.FOSAMT else 0 end) as [Bucket :3],
sum(a.FOSAMT) as [All Buckets]
from
dbo.COL_TRN_AGREEMENT a
group by
a.CPORTFOLIOCODE with rollup
我得到这个输出
可以这样用简单的逻辑和更快的执行完成,或者这是最简单的方法。
我没有看到任何其他方式来做到这一点。如果您想提高性能,请发布查询计划。 – 2014-09-23 04:33:28
在“执行计划”中查询计划需要帮助进行优化(作为附件的.sqlplan文件是最好的IMO) – 2014-09-23 04:41:53
由于dbo.COL_TRN_AGREEMENT中的COUNT(SZCUSTOMERNO)选择是不随每行更改的静态字段,所以最好声明一个这将有助于更快地检索数据。 – Azar 2014-09-23 04:43:47