2017-03-01 64 views
-2

我有两个表格。首先表stk如何使用union来处理来自两个不同表格的日期

ITEMID | STOCK 
-------------- 
Test1 | 10 
Test2 | 15 
Test3 | 12 

qty

ITEMID | DOCDATE | QTY 
-------------------------- 
Test1 | 2/28/2017 | 5 
Test2 | 2/28/2017 | 8 
Test3 | 2/28/2017 | 6 

我用这个查询第二表

select itemid,stock,docdate,qty 
from (
     select itemid,stock,null docdate,0 qty from stk 
     union 
     select itemid,0 stock,docdate,qty from qty 
    ) 
group by itemid,stock,docdate,qty 
order by 1 

输出我得到:

ITEMID | STOCK | DOCDATE | QTY 
------------------------------ 
Test1 | 0  |2/28/2017 | 5 
Test1 | 10 |   | 0 
Test2 | 0  |2/28/2017 | 8 
Test2 | 15 |   | 0 
Test3 | 0  |2/28/2017 | 6 
Test3 | 12 |   | 0 

,但我想有这个OUTP UT:

ITEMID | STOCK | DOCDATE | QTY 
------------------------------ 
Test1 | 10 |2/28/2017 | 5 
Test2 | 15 |2/28/2017 | 8 
Test3 | 12 |2/28/2017 | 6 
+0

删除所有不相关的DBMS标签。 –

+2

你似乎不需要一个联合,而是一个简单的联接。有没有原因加入你的桌子不行?还有,Oracle还是Mysql? – Aleksej

回答

0

使用JOIN得到结果:

SELECT ITEMID ,STOCK,DOCDATE,QTY 
FROM table1 
JOIN table2 ON table1.ITEMID = table2.ITEMID 
0

如果你只想合并来自两个不同的表来,那么你可以使用此查询行:

select itemid, MAX(stock), MAX(docdate), MAX(qty) 
from (
     select itemid,stock,null docdate,0 qty from stk 
     union 
     select itemid,0 stock,docdate,qty from qty 
    ) as t 
group by itemid 
order by 1 

Demo here

+0

它只是一个示例问题 - 我的要求只在工会。 –

+0

@NirmalR恐怕我无法跟随你想说的话。你能否详细说明一下? –

+0

谢谢你,他的工作很好 –

0

如果你唯一的目标是有这个输出,那么你可以这样做:

SELECT Q.ItemId, (SELECT S.stock FROM stk S ON S.ItemId = Q.ItemId) AS STOCK, Q.DocDate, Q.Qty FROM qty Q 

我使用子查询这两个表连接的ID,然后我选择STK股票,其中项目Id是一样的项目Id的数量。

0

工会是垂直连接是水平的。也许这样的事情是必需的。

MariaDB [sandbox]> create table stk(ITEMID varchar(10), STOCK int); 
Query OK, 0 rows affected (0.20 sec) 

MariaDB [sandbox]> insert into stk values 
    -> ('Test1' , 10), 
    -> ('Test2' , 15), 
    -> ('Test3' , 12); 
Query OK, 3 rows affected (0.02 sec) 
Records: 3 Duplicates: 0 Warnings: 0 

MariaDB [sandbox]> 
MariaDB [sandbox]> drop table if exists qty; 
Query OK, 0 rows affected (0.14 sec) 

MariaDB [sandbox]> create table qty(ITEMID varchar(10), DOCDATE varchar(10) , QTY int); 
Query OK, 0 rows affected (0.20 sec) 

MariaDB [sandbox]> insert into qty values 
    -> ('Test1' , '2/28/2017' , 5), 
    -> ('Test2' , '2/28/2017' , 8), 
    -> ('Test3' , '2/28/2017' , 6), 
    -> ('Test1' , '3/28/2017' , 7), 
    -> ('Test2' , '3/28/2017' , 7), 
    -> ('Test3' , '3/28/2017' , 7); 
Query OK, 6 rows affected (0.01 sec) 
Records: 6 Duplicates: 0 Warnings: 0 

MariaDB [sandbox]> 
MariaDB [sandbox]> select s.itemid,s.stock, 
    -> q.docdate,sum(q.qty) qty 
    -> from stk s 
    -> join qty q on q.itemid = s.itemid 
    -> group by s.itemid,s.stock,q.docdate 
    -> order by q.docdate, s.itemid,s.stock 
    -> 
    -> ; 
+--------+-------+-----------+------+ 
| itemid | stock | docdate | qty | 
+--------+-------+-----------+------+ 
| Test1 | 10 | 2/28/2017 | 5 | 
| Test2 | 15 | 2/28/2017 | 8 | 
| Test3 | 12 | 2/28/2017 | 6 | 
| Test1 | 10 | 3/28/2017 | 7 | 
| Test2 | 15 | 3/28/2017 | 7 | 
| Test3 | 12 | 3/28/2017 | 7 | 
+--------+-------+-----------+------+ 
6 rows in set (0.00 sec) 
相关问题