2017-03-01 10 views
-2

私は2つのテーブルを持っています。まずテーブルstk2つの異なるテーブルから日付を処理するための共用体の使用方法

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結果を取得する:あなただけ、あなたは、このクエリを使用することができる2つの異なるテーブルからの行を統合したい場合

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

@ irmalR私は、あなたが言うことに従うことができないのではないかと心配しています。あなたは詳細を教えていただけますか? –

+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に2つのテーブルを接続するためにサブクエリを使用しています、そして私は、アイテム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) 
関連する問題