mysql - 如何构建这个查询?

标签 mysql database oracle oracle11g oracle10g

我有 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/

相关文章:

sql - 搜索数据库

SQL Server - 返回多个不同的值

android - 尝试获取现有数据库 Room Android

java - 异常来自 Collection 的不同值 - CurrentBSONType 是 UNDEFINED

mysql - 将 select 语句转换为更新(包括 exists & having)

mysql - SQL 查询 3 个表

oracle - 如何使用现有的 Oracle 序列在 hibernate 中生成 id?

sql - 锁定 Oracle 行,使第二个线程无法读取数据

java - 提高 Blob 插入 Oracle 表的速度

php - 如何选择查询的逆