所以我有一个相当复杂的sql语句,根据需求将十个表合并到一个表中。
结果样本(仅包含此问题所必需的基本内容)
Unique | date | amount | Table
12345 | 10/2 | 200 | 1
12345 | 10/2 | 20 | 2
23456 | 10/3 | 100 | 3
我的问题是,由于前两行的唯一性是相同的,但是从不同的表中,如何将它们合并在一起以便它成为这个?
Unique | date | amount | Table
12345 | 10/2 | 220 | 1 (Don't really care about the table number)
23456 | 10/3 | 100 | 3
这是我的陈述的样本
(SELECT unique, dates, amt, tbl FROM ..... WHERE ....)
UNION
(SELECT unique, dates, amt, tbl FROM ..... WHERE ....) ORDER BY dates ASC
如果可以通过MYsql完成会很棒,如果没有,PHP / VB.net中的答案也会被接受。所有帮助赞赏。感谢
答案 0 :(得分: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,如果省略子串,则可以打印所有表名。 没有all子句使用union语句是不值得的,因为mysql会尝试重复数据删除而你真的不想这样做。