2017-03-01 39 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) 
相關問題