2017-10-06 13 views
0

私はかなり複雑なSQLステートメントを10テーブルを要件に基づいて1つのテーブルにマージしています。Mysql unison with existsステートメント

結果のサンプル(のみ、この質問のために必要不可欠で構成)

Unique | date | amount | Table 
12345 | 10/2 | 200 | 1 
12345 | 10/2 | 20 | 2 
23456 | 10/3 | 100 | 3 

私の質問は独特の最初の2行に対して同じであるため、ですが、別のテーブルから、どのようにすることができます私はそれらを一緒にマージするので、これはなりますか?

Unique | date | amount | Table 
12345 | 10/2 | 220 | 1 (Don't really care about the table number) 
23456 | 10/3 | 100 | 3 

これは、MySQLを介して行うことができ、そうでない場合は、PHP/VB.netで回答も受け入れられるかどう私の文のサンプル

(SELECT unique, dates, amt, tbl FROM ..... WHERE ....) 
UNION 
(SELECT unique, dates, amt, tbl FROM ..... WHERE ....) ORDER BY dates ASC 

は素晴らしいことだです。すべての助けに感謝します。ありがとう

答えて

0

group_concatを使用してすべてのテーブル名を取得すると、クエリをグループにラップすることができます。例

DROP TABLE IF EXISTS T1,T2,T3; 

CREATE TABLE T1(UNIQUEID INT, DT DATE, AMT INT); 
CREATE TABLE T2(UNIQUEID INT, DT DATE, AMT INT); 
CREATE TABLE T3(UNIQUEID INT, DT DATE, AMT INT); 

INSERT INTO T1 VALUES(1,'2017-01-01',10),(1,'2017-02-01',10),(2,'2017-01-01',20); 
INSERT INTO T2 VALUES(1,'2017-01-01',10),(3,'2017-01-01',10),(4,'2017-01-01',20); 
INSERT INTO T3 VALUES(2,'2017-01-01',10),(5,'2017-01-01',10),(4,'2017-01-01',20); 

SELECT UNIQUEID,DT,SUM(AMT) SUMAMT,SUBSTR(GROUP_CONCAT(TNAME),1,2) 
FROM 
(
SELECT 'T1' TNAME, UNIQUEID, DT,AMT FROM T1 
UNION ALL 
SELECT 'T2' TNAME, UNIQUEID, DT,AMT FROM T2 
UNION ALL 
SELECT 'T3' TNAME, UNIQUEID, DT,AMT FROM T3 
) S 
GROUP BY UNIQUEID,DT; 

結果について

+----------+------------+--------+---------------------------------+ 
| UNIQUEID | DT   | SUMAMT | SUBSTR(GROUP_CONCAT(TNAME),1,2) | 
+----------+------------+--------+---------------------------------+ 
|  1 | 2017-01-01 |  20 | T1        | 
|  1 | 2017-02-01 |  10 | T1        | 
|  2 | 2017-01-01 |  30 | T1        | 
|  3 | 2017-01-01 |  10 | T2        | 
|  4 | 2017-01-01 |  40 | T3        | 
|  5 | 2017-01-01 |  10 | T3        | 
+----------+------------+--------+---------------------------------+ 
6 rows in set (0.00 sec) 

ご希望の場合GROUP_CONCATを注文することができますし、部分文字列を除外した場合、あなたはすべてのテーブル名を印刷することができます。 mysqlは重複除外を試みるので、本当にしたくないので、all節なしでunion文を使う価値はありません。

関連する問題