我有 table http://oi58.tinypic.com/2s7xreo.jpg
id action_date type item_id quantity
--- ----------- ---- ------- --------
87 4/25/2014 1 s-1 100
88 4/1/2014 1 s-1 150
89 4/4/2014 1 s-1 200
90 4/3/2014 1 s-2 222
91 4/7/2014 1 s-2 10
96 4/4/2014 1 s-2 8
97 4/22/2014 1 s-2 8
98 4/21/2014 2 s-1 255
99 4/5/2014 2 s-1 6
100 4/6/2014 2 s-2 190
101 4/6/2014 2 s-3 96
102 4/8/2014 2 s-1 120
103 4/15/2014 2 s-2 3
104 4/16/2014 2 s-2 3
输入列,这意味着如果 1 这是我商店的商品 >>> 如果 2 这是我商店的商品 >>
我需要查询才能给我这样的结果
item in out net
s1 300 195 105
等等>>
如何编写给出此结果的查询>> 如果我必须将它们放在拖表中>>输入表和输出表如果这有帮助>>>它如何构建查询> 提前感谢:)
注意::我正在研究访问
最佳答案
获取结果的一种方法是在表达式上使用聚合函数,该函数根据 type
的值有条件地返回 quantity
的值。
SELECT t.item
, SUM(CASE WHEN t.type = 1 THEN t.quantity ELSE 0 END) AS in_
, SUM(CASE WHEN t.type = 2 THEN t.quantity ELSE 0 END) AS out_
, SUM(CASE WHEN t.type = 1 THEN t.quantity ELSE 0 END)
- SUM(CASE WHEN t.type = 2 THEN t.quantity ELSE 0 END) AS net_
FROM mytable t
GROUP BY t.item
此方法适用于 Oracle、MySQL 和 SQL Server。
(如果删除 SUM()
聚合函数和 GROUP BY
子句,您可以看到 CASE
表达式是如何工作的。上面的查询给出了您指定的结果,这只是一个演示,有助于“解释”该查询是如何工作的。)
SELECT t.item
, CASE WHEN t.type = 1 THEN t.quantity ELSE 0 END AS in_
, CASE WHEN t.type = 2 THEN t.quantity ELSE 0 END AS out_
, t.*
FROM mytable t
<小时/>
更新
遗憾的是,Microsoft Access 不支持 CASE
表达式。但 Access 确实有一个 iif
函数。同样的方法应该可以工作,语法可能是这样的:
SELECT t.item
, SUM(iif(t.type = 1, t.quantity, 0) AS in_
, SUM(iif(t.type = 2, t.quantity, 0) AS out_
, SUM(iif(t.type = 1, t.quantity, 0)
- SUM(iif(t.type = 2, t.quantity, 0) AS net_
FROM mytable t
GROUP BY t.item
关于mysql - 如何构建这个查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23304841/