SQL Server 2008 R2 を使用しています。私は1つのテーブルを言うBrokerTable
-----------------------------------
BrokerCode | Rank | BrokerId
-----------------------------------
1527339 | 1 | 3880
1527488 | 1 | 7550
1527366 | 1 | 3854
1527400 | 1 | 1519
1527358 | 1 | 3862
1527357 | 1 | 3863
以下は、上記の表にあるブローカーのビジネスを計算するクエリの一部です。たとえば、BrokerId 3880
SELECT CONVERT(DECIMAL(18, 2), SUM(T.Amount11))
FROM ( SELECT ISNULL(( CASE WHEN mb.PlanType = 'MULTIPLE'
THEN CASE WHEN mb.Mode = 'MLY' THEN ( ( ( SUM(SelfAmount) + SUM(UnitAmount) )
* ( SELECT bcm.PromoteeQuota FROM dbo.BusinessCalcMaster AS bcm
WHERE bcm.PlanType = mb.PlanType AND bcm.PlanName = mb.PlanName
AND bcm.Year = mb.Year AND mb.Mode = 'MLY'
AND bcm.MLY_From <= mb.InstallmentNo AND bcm.MLY_To >= mb.InstallmentNo
) ) / 100 ) WHEN mb.Mode = 'QLY' THEN ( ( ( SUM(SelfAmount)
+ SUM(UnitAmount) ) * ( SELECT bcm.PromoteeQuota FROM
dbo.BusinessCalcMaster AS bcm WHERE bcm.PlanType = mb.PlanType
AND bcm.PlanName = mb.PlanName AND bcm.Year = mb.Year
AND mb.Mode = 'QLY' AND bcm.MLY_From <= mb.InstallmentNo
AND bcm.MLY_To >= mb.InstallmentNo ) ) / 100 )
WHEN mb.Mode = 'HLY' THEN ( ( ( SUM(SelfAmount) + SUM(UnitAmount) )
* ( SELECT bcm.PromoteeQuota FROM dbo.BusinessCalcMaster AS bcm WHERE
bcm.PlanType = mb.PlanType AND bcm.PlanName = mb.PlanName
AND bcm.Year = mb.Year AND mb.Mode = 'HLY' AND bcm.MLY_From <= mb.InstallmentNo
AND bcm.MLY_To >= mb.InstallmentNo ) ) / 100 )
WHEN mb.Mode = 'YLY' THEN ( ( ( SUM(SelfAmount) + SUM(UnitAmount) )
* ( SELECT bcm.PromoteeQuota FROM dbo.BusinessCalcMaster AS bcm
WHERE bcm.PlanType = mb.PlanType AND bcm.PlanName = mb.PlanName
AND bcm.Year = mb.Year AND mb.Mode = 'YLY' AND bcm.MLY_From <= mb.InstallmentNo
AND bcm.MLY_To >= mb.InstallmentNo ) ) / 100 ) END
WHEN mb.PlanType = 'SINGLE' THEN ( ( SUM(SelfAmount) + SUM(UnitAmount)
* ( SELECT bcm.PromoteeQuota FROM dbo.BusinessCalcMaster
AS bcm WHERE bcm.PlanType = mb.PlanType
AND bcm.PlanName = mb.PlanName AND bcm.Year = mb.Year ) ) / 100 )
END ), 0) AS Amount11 , mb.InstallmentNo
FROM dbo.MemberBusiness AS mb WHERE mb.BrokerId = 3880
AND ( ( mb.PlanType = 'MULTIPLE' AND ( ( mb.Mode = 'HLY'
AND mb.InstallmentNo = 2 ) OR ( mb.Mode = 'QLY' AND mb.InstallmentNo >= 2
AND mb.InstallmentNo <= 4 ) OR ( mb.Mode = 'MLY' AND mb.InstallmentNo >= 2
AND mb.InstallmentNo <= 12 ) OR ( mb.InstallmentNo = 1 ) ))
OR ( mb.PlanType = 'SINGLE' ) )AND mb.Date >= '2013-02-01 00:00:00.000'
AND mb.Date <= '2013-02-28 00:00:00.000' GROUP BY mb.Mode , mb.Year ,
mb.PlanName , mb.PlanType , mb.InstallmentNo ) AS T
ブローカーの数に制限はBrokerTable
ありません。BrokerTable
各ブローカーのビジネスを計算し、ビジネスが 15000 を超えるブローカーの数を取得したいと考えています。
カーソルを使用できますが、テーブルに任意の数のブローカーが存在する可能性があると述べたように、クエリの実行に時間がかかります。より短い時間または最も簡単な方法で結果を得るにはどうすればよいですか? ありがとう