首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何构建此查询?

如何构建此查询?
EN

Stack Overflow用户
提问于 2014-04-25 23:47:37
回答 2查看 44关注 0票数 0

我有http://oi58.tinypic.com/2s7xreo.jpg

代码语言:javascript
运行
复制
 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,这是从我的商店>>的项目

我需要查询才能给出这样的结果

代码语言:javascript
运行
复制
item   in   out   net 

s1     300  195  105

>>等

如何编写给我这个结果>>的查询,如果我必须将它们放在两个表中,输入表的>>表和out的表,如果这有助于>>>如何预先构建查询>和>>> :)

注:我正在研究准入问题。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-04-26 00:00:24

获得结果的一种方法是在表达式上使用聚合函数,该表达式根据quantity的值有条件地返回type的值。

代码语言:javascript
运行
复制
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和Server。

(如果删除SUM()聚合函数和GROUP BY子句,您可以看到CASE表达式是如何工作的。上面的查询给出了您指定的结果,这只是一个帮助“解释”该查询工作方式的演示。)

代码语言:javascript
运行
复制
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不支持CASE表达式。但是Access有一个iif函数。同样的方法应该有效,语法可能如下所示:

代码语言:javascript
运行
复制
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
EN

Stack Overflow用户

发布于 2014-04-25 23:59:15

代码语言:javascript
运行
复制
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;

我希望这是你所需要的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23304841

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档