1

これが状況です。
テーブル a
コーラ 1 コーラ 2

テーブル b
colb1 colb2 colb3 colb4 colb5

テーブル c
colc1 colc2 colc3

cola2 = colb1 および colb4 = colc12 のすべての値に対して、cola2 = colb1 および colb5 = colc3
のすべての値に対して colb2 をフェッチし、colb3 をフェッチします。

cola2 ごとに (colb3- colb2) * size * factor1 を計算します。
cola2 ごとに SUM((colb3- colb2) * size * factor1) を
計算します。 cola2 ごとに AVG((colb3- colb2) * size * factor1) を計算します。

(colb3- colb2) * size * factor1 の値は、他の計算のためにもテーブルに格納する必要があります。複数ステートメントのテーブル値のユーザー定義関数を使用してみました。ただし、同じテーブルで集計値と単一値の両方を返すことはできません。同じ結合クエリで複数の UDF を使用するにはどうすればよいですか? 他に使用できる機能はありますか?

サンプルデータ : table a
id1 prod1

table b
id1 datefrom dateto id1 id2
id2 datefrom dateto id3 id4

table c
id1 date price
id2 date price
id3 date price
id4 date price
テーブル b(id1) がテーブル c(id1) に一致
テーブル b(id2) が一致テーブル c(id2)

テーブル b の両方の ID の価格をテーブル c から取得する必要があるため、値を減算して結果の合計を求めることができます。どんな助けにも感謝します。

4

1 に答える 1

1

単純なSQLステートメントでそれを実行できないのはなぜですか?ここではそれほど難しいことは見ていません

select cola2, 
CASE WHEN cola2 = colb1 AND colb4 = colc12 THEN colb2 ELSE NULL END as Calculation1, 
CASE WHEN cola2 = colb1 AND colb5 = colc3 THEN colb3 ELSE NULL END AS Calculation2,
 (colb3 - colb2) * size * factor1 as Calculation3, <...>
INTO #intermediate
FROM tablea 
INNER JOIN tableb ON <...>
INNER JOIN tablec ON <...>

SELECT SUM(Calculation3) as SumCalculation3, AVG(Calculation3) as AvgCalculation3
FROM #intermediate

もちろん...あなたが省略したあなたの問題には追加の部分があります。しかし、一般的に、中間テーブルを使用することは問題なく、多くの場合、これらの種類の複雑な計算を処理するための最速の方法です。すべてを1つのSQLSELECTにまとめようとすると、メンテナンスの悪夢が求められます。

于 2009-07-23T18:14:35.733 に答える