【发布时间】:2020-04-27 04:01:48
【问题描述】:
如何分组/汇总如下图示例。
相同的数据将根据日期和项目列进行分组。
数量将是总和。
如果负数大于最小日期的总数量(total qty = 0),该行将被删除。
这种情况也将持续到下一个 min 日期。
在这种情况下,2020 年 1 月 1 日和 2020 年 1 月 2 日将被删除,因为负数超过这 2 天的总和。
如果您需要示例表,请使用下面的脚本。
CREATE TABLE #temp_table(
[id] [int] IDENTITY(1,1) NOT NULL,
[trans_date] [date] NOT NULL,
[item] [nvarchar](40) NOT NULL,
[qty] [int] NOT NULL,
)
INSERT INTO #temp_table ( trans_date, item, qty )
VALUES
( '1-Jan-2020', 'Item A', 2 )
INSERT INTO #temp_table ( trans_date, item, qty )
VALUES
( '2-Jan-2020', 'Item A', 4 )
INSERT INTO #temp_table ( trans_date, item, qty )
VALUES
( '3-Jan-2020', 'Item B', 1 )
INSERT INTO #temp_table ( trans_date, item, qty )
VALUES
( '3-Jan-2020', 'Item A', 3 )
INSERT INTO #temp_table ( trans_date, item, qty )
VALUES
( '4-Jan-2020', 'Item A', -1 )
INSERT INTO #temp_table ( trans_date, item, qty )
VALUES
( '5-Jan-2020', 'Item A', -6 )
INSERT INTO #temp_table ( trans_date, item, qty )
VALUES
( '6-Jan-2020', 'Item A', 4 )
SELECT * FROM #temp_table
DROP TABLE #temp_table
我的第一次尝试是
select
trans_date
, item
, SUM(qty)
from temp_table
group BY
trans_date
, item
我的第二次尝试,当我第一行为0时,我觉得我缺乏一些条件来减少下一行。
select
temp_table.trans_date
, temp_table.item
, SUM(temp_table.qty) + SUM(neg_table.neg_qty)
from temp_table
OUTER APPLY (
SELECT ISNULL( SUM(neg.qty), 0) AS neg_qty FROM pca_temp_table neg
WHERE 1=1
and temp_table.item = neg.item
and neg.qty < 0
) as neg_table
WHERE qty > 0
group BY
trans_date
, item
【问题讨论】:
-
请展示你的尝试
-
我无法理解您的消极/积极状况 - 我建议您详细展示您的工作。
-
刚刚编辑了我的尝试。这很简单,但我的想法不多了。
标签: sql sql-server