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

ETC

如果这是一个很好的方法。我只是在寻找一种计算价格差异的方法。由于此表有大约 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_NO在我的查询中,我按TXN_YR和对数据进行分组TXN_MON。结果每个月的每个项目都应该有一个组。UNIT_COST可能因组中的每个成员而异。

在结果中,我可以将聚合函数应用于组,以允许我表达组的某些属性。在我的示例中,我返回了该组的平均单位成本,以及该组的统计方差。

因此,结果集中的每一行将包含每个组的一行,包括:

  • ITEM_NO
  • TXN_YR
  • TXN_MON
  • UNIT_COST该月 的平均值
  • UNIT_COST该月 的方差
于 2013-02-06T15:42:11.977 回答