从TXT和分组中获取数据并减去

问题描述 投票:0回答:3

尝试从txt文件中获取数据,该文件包含以下格式的买卖。我想按项目分组并互相减去。

我进行了三个查询,例如totalin,totalout和库存,但是当我从in中减去时,缺少了一些未售出的项目。

这是数据表

+------+---------+--------+
| TYPE |  ITEM   | AMOUNT |
+------+---------+--------+
| BUY  | APPLE   |    100 |
| BUY  | ORANGE  |    100 |
| BUY  | APPLE   |    200 |
| BUY  | ORANGE  |    200 |
| SELL | APPLE   |     50 |
| SELL | APPLE   |     50 |
| SELL | ORANGE  |    100 |
| SELL | ORANGE  |    100 |
| BUY  | COCONUT |     50 |
| SELL | BANANE  |     30 |
+------+---------+--------+

我想要此输出

+---------+--------+
|  ITEM   | AMOUNT |
+---------+--------+
| APPLE   |    200 |
| BANANE  |    -30 |
| COCONUT |     50 |
| ORANGE  |    100 |
+---------+--------+

我对想要的结果进行了3次查询,但不幸的是我被困住了。

这是我的查询

第1个查询,共:SELECT DATA.TYPE, DATA.ITEM, Sum(DATA.AMOUNT) AS TOTALIN FROM DATA GROUP BY DATA.TYPE, DATA.ITEM HAVING (((DATA.TYPE)="BUY"));

查询2总计:SELECT DATA.TYPE, DATA.ITEM, Sum(DATA.AMOUNT) AS TOTALOUT FROM DATA GROUP BY DATA.TYPE, DATA.ITEM HAVING (((DATA.TYPE)="SELL"));

查询3库存:SELECT DATA.ITEM, [BUY]![TOTAL_IN]-[SELL]![TOTAL_OUT] AS STOK FROM (DATA INNER JOIN BUY ON DATA.ITEM = BUY.ITEM) INNER JOIN SELL ON DATA.ITEM = SELL.ITEM GROUP BY DATA.ITEM, [BUY]![TOTAL_IN]-[SELL]![TOTAL_OUT];

我如何进行查询,将其余的显示为库存。

非常感谢。

sql ms-access group-by subtraction sumifs
3个回答
0
投票

您可以一口气总结:

SELECT ITEM, 
       Sum(iif(data.type = "BUY", AMOUNT, -AMOUNT)) AS Stock
    FROM DATA
    GROUP BY ITEM;

0
投票

您可以将卖出视为-ve,将买入视为+ ve金额。

然后查询变成如下

select item
       ,sum(case when type='BUY' then Amount
                 when type='SELL' then -Amount
             end) as Amount
  from data_table
 group by item

0
投票

在MsAccess中,您可以使用iif function应用if-logic块,并按如下所示一步来运行查询。

SELECT item,   
SUM(iif ([type] = "SELL", (-1 * Amount), Amount)) as amounts   
FROM data   
GROUP BY item
© www.soinside.com 2019 - 2024. All rights reserved.