0

再帰的クエリを動的に作成するにはどうすればよいですか?再帰的クエリを動的に作成する方法は?

のはそれを言ってみましょう:

QuantityDateは次のようになります。

Month 3 The first quarter 
Month 6 The second quarter 
Month 9 The third quarter 
Month 12 The fourth quarter 

ユーザーが6

第二四半期を選択した場合、その後、私は第1四半期のデータ+内のデータを合計します第2四半期

ユーザーは、その後、私は...

など第3四半期に第二四半期に +データを第1四半期のデータ+データを合計する第三四半期9

を選択した場合

私のクエリは、このようなものです:ここ

ユーザが第2四半期(6)を選択し、だから私は第一四半期dを合計しますATAこのような+第二四半期データ:

,((ISNULL(d.SalesCost,0)*-1)/ 

(ISNULL(d.LocalSales,0)+ISNULL(d.Exporting,0) --The selected quarter data 
+ 
(SELECT ISNULL(e.LocalSales,0)+ISNULL(e.Exporting,0)--The First Quarter 
FROM CTE e 
WHERE e.[Year] = d.[Year] 
AND e.period =2 
AND e.PeriodTypeId =2 
AND e.CompanyId = d.CompanyId 
AND MONTH(e.QuantityDate)=3))) AS Tot1, 
,d.QuantityDate 
FROM CTE d 
INNER JOIN CTE t 
ON d.[Year] = t.[Year] 
AND d.period = t.period 
AND d.PeriodTypeId = t.PeriodTypeId 
AND d.CompanyId = t.CompanyId 
AND d.QuantityDate =t.QuantityDate 
WHERE d.[Year] IN (2016,2015) AND d.PeriodTypeId =2 AND d.Period =2 
AND YEAR(d.QuantityDate)IN (2016,2015) AND MONTH(d.QuantityDate)=6 
ORDER BY d.CompanyId, d.[Year] DESC 

は私の全体のクエリ:

Query


サンプルデータ:

のは、このような数量表を言ってみましょう:

ユーザーは私が得る第二四半期を選択すると

は、第1および

15   20  1-3-2016 
22   80  1-6-2016 

CTE dにおける第2四半期のデータは、その後、私はCTE e

でそれに参加し、そのSalesCost = -20

のため言うなら

tot1は、20/((15+20)+(22+80))

+0

質問を編集して元のデータを表示する必要があります。 –

+0

@GordonLinoff:質問を編集してください。 –

答えて

1

再帰は必要ありません。ちょうど累積の合計。

あなたのデータはどのように見えるかを確認するのは難しいですが、クエリは次のようになります。

SELECT companyid, quarter(QuantityDate) as qq, 
     SUM(COALESCE(e.LocalSales, 0) + COALESCE(e.Exporting, 0)) as quartersales, 
     SUM(SUM(COALESCE(e.LocalSales, 0) + COALESCE(e.Exporting, 0))) OVER 
      (PARTITION BY companyid, order by quarter(QuantityDate)) as running_sum 
FROM t 
WHERE e.[Year] = d.[Year] 
GROUP BY companyid, quarter(QuantityDate); 

あなたの元のデータレイアウトは不明であるが、これは従うことは、かなり簡単なはずです。再帰ではなくウィンドウ関数を使用したい。

+0

質問が大ですので、貼り付けます:http://pastebin.com/Yr2vzYe9 ここで、 'period'は' quarter number'と 'periodtypeid'です。 'annual'または' quarter'のタイプです –

+0

私は問題を削除してデータを簡略化しようとしていますが、質問を見てください:http://pastebin.com/Yr2vzYe9 –