0

アイテムのテーブルの期間にわたる価格の分散を計算するための最適なルートを決定しようとして、stackoverflow でいくつかの投稿を読みました。私の ITEM_NO、Month、Year はすべて、Unit cost と同様に同じテーブル内にあります。基本的に、ここにいくつかのサンプルデータがあります:

DECLARE    @Inventory TABLE (Month NUMERIC, Year NUMERIC, ItemNumber NUMERIC, Cost DECIMAL)

INSERT     @Inventory
SELECT     '01', '12', '0001', '1.05' 
SELECT     '02', '12', '0001', '1.05' 
SELECT     '03', '12', '0001', '1.02' 
SELECT     '02', '12', '0002', '1.25' 
SELECT     '03', '12', '0003', '1.55'
SELECT     '03', '12', '0003', '1.57'
SELECT     '03', '12', '0003', '1.61'
SELECT     '03', '12', '0002', '1.29'

基本的に、出力は次のようになります。

Item Number |  Current Cost  |  % Change  |  Month  | Year
-----------------------------------------------------------
       0001 |           1.02 |       0.01 |      02 |    12

それが良い方法であれば。価格の差異を計算する方法を探しています。このテーブルには約 600,000 行があり、item_number は時間の経過とともに異なる価格 (毎月または数か月ごとに異なる) で複数回繰り返されるため、レポートを生成すると便利です。私は SQL に完全に慣れているわけではありませんが、T_SQL には少し慣れていないため、この考えに頭を悩ませようとしています。

私はもう試した:

USE BWDW; -- database
GO
SELECT ITEM_NO AS 'Item Number', TXN_YR AS 'Year', TXN_MON AS 'Month', UNIT_COST AS 'Item Price', STDEV(UNIT_COST) AS 'Variance Price'
FROM DS_tblFactInventoryTxnHistory
GROUP BY ITEM_NO, TXN_YR, TXN_MON, UNIT_COST
ORDER BY ITEM_NO;
GO   

出力は次のようになります。

Item Number Year    Month   Item Price  Variance Price
02009739        11  11  6180.0000   0
02009779        11  11  5459.0000   0
104415          12  8   0.0618  0
104415          12  9   0.0618  NULL
104650          11  5   1.0000  0
104650          11  7   1.0000  0
104650          11  8   0.2575  NULL
104650          11  10  0.2575  0
104650          11  12  0.0319  NULL
104650          11  12  0.1071  0
104650          11  12  0.1823  0
104650          11  12  0.2575  0
104650          12  8   0.0319  1.07539867831324E-09
104650          12  9   0.0319  1.57825377906919E-09

これは、最終的にドルになるものには多くの小数のように思えます。最後の列を切り上げることができることはわかっています。MSDN の STDEV、サイトのさまざまなソース、および sqlteam のサイトの DATEDIFF の説明について読んでいます。

これはおそらく完全に初歩的な質問であり、私の目的を支援するために誰かが提供できる洞察に感謝します。

4

1 に答える 1

1

あなたは実際に次のようなものを望んでいませんか:

SELECT
            ITEM_NO ItemNumber,
            TXN_YR Year,
            TXN_MON Month,
            AVG(UNIT_COST) AveragePrice,
            VAR(UNIT_COST) PriceVarianceInMonth
    FROM
            DS_tblFactInventoryTxnHistory
    GROUP BY
            ITEM_NO,
            TXN_YR,
            TXN_MON
    ORDER BY
            ITEM_NO,
            TXN_YR,
            TXN_MON

はるかに意味のあるデータを提供します。


基本的に、group 句はデータをグループに分割するために使用されます。私のクエリでは、データを と でグループ化してITEM_NOTXN_YRますTXN_MON。結果には、毎月のすべてのアイテムのグループが含まれているはずです。グループのUNIT_COSTメンバーごとに異なる場合があります。

結果では、グループに集計関数を適用して、グループのプロパティを表現できます。この例では、グループの平均単価と、グループの統計的分散を返します。

したがって、結果セットの各行には、以下を含む各グループの行が含まれます。

  • ITEM_NO
  • TXN_YR
  • TXN_MON
  • UNIT_COSTその月 の平均
  • UNIT_COSTその月 の分散
于 2013-02-06T15:42:11.977 に答える