【问题标题】:GET DATA FROM TXT SUM GROUP BY AND SUBTRACT从 TXT SUM 组中获取数据并减去
【发布时间】:2020-04-07 18:38:34
【问题描述】:

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

我进行了三个查询,例如 totalin 和 totalout 以及 stock,但是当我从 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


    【解决方案1】:

    你可以一口气总结如下:

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

    【讨论】:

    • 谢谢,我只是不这么想。 'CASE WHEN' 子句在 access 中是否有效?
    • 我不使用访问权限,但访问权限中不存在 AFAIK 案例。如果还不算太晚,最好使用其他东西。
    【解决方案2】:

    您可以将 SELL 视为 -ve,将 BUY 视为 +ve Amount。

    那么查询变成如下

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

    【讨论】:

      【解决方案3】:

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

      SELECT item,   
      SUM(iif ([type] = "SELL", (-1 * Amount), Amount)) as amounts   
      FROM data   
      GROUP BY item
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多