我知道這個問題在這裏經常被問到,但我有一些不同的要求。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