棘手的SQL分组查询

时间:2014-06-04 23:17:09

标签: sql sql-server group-by

我有一张桌子可以跟踪分配的物品。我拥有的主要数据是TransactionID,TransactionDateTime,PersonID,CostCentre,ProductID,TransactionType和Quantity。

我需要将此表转换为仅显示已分配和使用的项目。

现在我的问题是,在某些情况下,产品可能会被分发,比如该项目的25个,然后由于某种原因,它可能被完全或部分退​​回。所以要么25回来,要么15回来。结果记录需要确定分配的正确数量。

要表示退货,数量字段为负数,且TransactionType为DSPN-与标准交易的DSPN相反。

在大多数情况下,对于已分配和返回事务,TransactionID都是相同的,从而产生一个简单的Group By功能。但是我发现这种情况并非如此,并且想知道是否有另一种方法可以将这些记录组合在一起。

到目前为止我只是基本组。

SELECT dspn_id AS DspnID, SUM([Qty]) AS Qty, MIN(creationDate) AS RIO, MIN(TransactionID) AS PKey FROM MyTable GROUP BY dspn_id HAVING SUM(Qty) > 0

标准情况的示例数据,我可以通过dspn_id进行分组: dspn_id creationDate PersonID CostCenter ProdID TranType QTY 972490 2012-10-08 12:14:46.440 984254875 CostCC1 4591 DSPN 25 972487 2012-10-08 12:14:46.463 984254875 CostCC1 1017 DSPN 30 972490 2012-10-08 12:15:24.270 984254875 CostCC1 4591 DSPN- -25 972487 2012-10-08 12:15:38.990 984254875 CostCC1 1017 DSPN- -30 972496 2012-10-08 12:15:51.490 984254875 CostCC1 4591 DSPN 25 972497 2012-10-08 12:15:51.500 984254875 CostCC1 1017 DSPN 30

我的问题所在的示例数据: dspn_id creationDate PersonID CostCenter ProdID TranType QTY 962376 2012-09-21 16:01:03.783 123456789 CostCC2 18007 DSPN 2 962998 2012-09-24 09:31:20.433 123456789 CostCC2 18007 DSPN- -1

我可以简单地按CostCenter和ProdID分组,但这不是我之后的解决方案。理想情况下,在上述情况下,我会为ProdID 18007创建一条记录,显示日期为2012-09-21 16:01:03.783,数量为1.即使将相同的ProdID分配给具有该CostCentre的PersonID。

0 个答案:

没有答案