Yip 发表于 2014-9-14 17:58:57

SQL: 一句sql语句查询表中A、B产品的剩余数量

本帖最后由 Yip 于 2014-9-15 11:35 编辑

题目:
数据库中有表TI,表示仓库中有产品若干,MC是产品名称,ZT表示状态,IN表示入库,OUT表示出库,SL是数量;
请用一句SQL语句,显示产品A、B的剩余数量。
-------------------------
|MC   |ZT    |SL    |
------------------------
|A      |IN    |200|
------------------------
|B      |IN    |100|
------------------------
|A      |OUT |20    |
------------------------

·
·省略其他行
·

小弟SQL基础没打好,请各位大神不吝赐教,谢谢~

=================================
看到大家的评论回答,很感激;
不过题干有几点可能大家没注意到,
第一、求A、B的剩余数量,即 IN的数量减去OUT的数量;
第二、上面表T1只是前3行数据,后面省略了其他记录,也就是表里面还有可能C、D··等等的产品;

所以,理想的结果应该是这样的:
|MC(名称)|RESULT(剩余)|
|A               |A的剩余数量      |
|B               |B的剩余数量      |


只是目前还写不出一句SQL可以满足以上需求(用MySQL更好^_^),恳请各位大大帮忙,谢谢~

xjmroot 发表于 2014-9-15 09:40:51

本帖最后由 xjmroot 于 2014-9-15 10:07 编辑

给你参考参考
select A.MC,totalin-if(isnull(totalout),0,totalout) as totalout from (select MC,sum(SL) as totalin from TI where ZT='IN' group by MC) as A left join (select MC,sum(SL) as totalout from TI where ZT='OUT' group by MC) as B on A.MC=B.MC;

mysql> select A.MC,if(isnull(totalin),0,totalin) as totalin,if(isnull(totalout),0,totalout) as totalout from (select MC,sum(SL) as totalin from TI where ZT='IN' group by MC) as A left join (select MC,sum(SL) as totalout from TI where ZT='OUT' group by MC) as B on A.MC=B.MC;
+----+---------+----------+
| MC | totalin | totalout |
+----+---------+----------+
| A| 200   | 20       |
| B| 100   | 0      |
+----+---------+----------+
2 rows in set

mysql>




xjmroot 发表于 2014-9-15 10:04:44

Closer 发表于 2014-9-15 09:54
抱歉抱歉~
沒注意到還有OUT那行


select A.MC,totalin-if(isnull(totalout),0,totalout) as totalout from (select MC,sum(SL) as totalin from TI where ZT='IN' group by MC) as A left join (select MC,sum(SL) as totalout from TI where ZT='OUT' group by MC) as B on A.MC=B.MC;
这个可以的,应该还有简单的。再想想

Closer 发表于 2014-9-15 10:25:50

本帖最后由 Closer 于 2014-9-15 10:28 编辑

xjmroot 发表于 2014-9-15 10:04
select A.MC,totalin-if(isnull(totalout),0,totalout) as totalout from (select MC,sum(SL) as totalin...
受到你的啟發,所以去找了一下,可以利用SUM和GROUP BY

SELECT MC, SUM(SL) AS SL FROM `TI` GROUP BY MC

這個語法的前提是,OUT項的值要改成負數
也就是 -20 ,這樣可以讓語法精簡很多






Closer 发表于 2014-9-15 09:20:36

基礎要打好,沒基礎,任何人都可以取代你
MySQL 超新手入門(3)SELECT 基礎查詢


select MC, SL from `TI` where MC='A' or MC='B'

語法應該是這樣




Closer 发表于 2014-9-15 09:54:16

xjmroot 发表于 2014-9-15 09:40
这咋显示、总量都不知道

抱歉抱歉~
沒注意到還有OUT那行


樓主這個需求我還真弄不出來...

沦陷今生 发表于 2014-9-15 09:58:28

关注

xjmroot 发表于 2014-9-15 10:06:27

沦陷今生 发表于 2014-9-15 09:58
关注

论坛蛮活跃的吗。。。我咋听说CI框架要过时了。是真的吗

Closer 发表于 2014-9-15 11:51:10

你的OUT值為什麼不在建立前先 * (-1)
這樣語法就很簡單了阿

Yip 发表于 2014-9-15 12:13:34

Closer 发表于 2014-9-15 11:51
你的OUT值為什麼不在建立前先 * (-1)
這樣語法就很簡單了阿

这只是一道试题{:soso_e100:}
页: [1] 2
查看完整版本: SQL: 一句sql语句查询表中A、B产品的剩余数量