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
类型列,表示如果这是我商店的项目>>>如果2这是我商店的商品>>
我需要查询给我这样的结果
item in out net
s1 300 195 105
依此类推>>
如何编写给我这个结果的查询>> 如果我必须,但他们在拖车表>>如果该帮助>>>表格中的表格和表格如何构建查询> 和thanx提前:))
注意::我正在进行访问
答案 0 :(得分:1)
获得结果的一种方法是在表达式上使用聚合函数,该函数根据quantity
的值有条件地返回type
的值。
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
答案 1 :(得分:0)
SELECT item_id,
In_col,
Out_col,
(In_col - Out_col) AS Net
FROM
(SELECT item_id,
sum(CASE WHEN TYPE = 1 THEN quantity END) AS In_col,
sum(CASE WHEN TYPE = 2 THEN quantity END) AS Out_col
FROM TABLE
GROUP BY item_id) AS t1;
我希望这是你需要的。