我试图根据类型(B)和日期(A)查询连接值(C)。如果白天没有B记录,我需要将0值加入连接值。如下例所示
+------------+---------+--------+
| A | B | C |
+------------+---------+--------+
| 2017-10-20 | 001 | 1 |
| 2017-10-20 | 002 | 2 |
| 2017-10-21 | 003 | 3 |
| 2017-10-21 | 001 | 4 |
| 2017-10-21 | 002 | 1 |
| 2017-10-22 | 002 | 2 |
| 2017-10-22 | 003 | 2 |
| 2017-10-23 | 001 | 4 |
| 2017-10-23 | 002 | 6 |
| 2017-10-24 | 003 | 1 |
+------------+---------+--------+
+------------+-----------+
| B | CONCAT |
+------------+-----------+
| 001 | 1,4,0,4,0 |
| 002 | 2,1,2,6,0 |
| 003 | 0,3,2,0,1 |
+------------+-----------+
但是我被困了,我需要一个解决方案。谢谢
基本问题是如果特定日期的数据不存在,则按日期顺序
插入0对于001(B),有2017-10-20(A) - 1(C),2017-10-21(A) - 4(C), 2017-10-22(A) - 0(C),2017-10-23(A) - 4(C), 2017-10-24(A) - 0(C),
SELECT b,
Group_concat(c ORDER BY b.a)
FROM pom2 a
LEFT JOIN (SELECT a
FROM pom2
GROUP BY a) b
ON a.a = b.a
GROUP BY a.b
在没有零的情况下返回
+-----+------------------------------+
| B | GROUP_CONCAT(C ORDER BY b.A) |
+-----+------------------------------+
| 001 | 1,4,4 |
| 002 | 2,1,2,6 |
| 003 | 3,2,1 |
+-----+------------------------------+
答案 0 :(得分:1)
是的,可以做到:)
SELECT b,
Group_concat(c ORDER BY b.a)
FROM (SELECT a.a,
a.b,
Coalesce(b.c, 0) AS C
FROM (SELECT b.a,
a.b,
0 AS C
FROM pom2 a
CROSS JOIN (SELECT a
FROM pom2
GROUP BY a) b) a
LEFT JOIN pom2 b
ON a.a = b.a
AND a.b = b.b
GROUP BY a.b,
a.a) a
LEFT JOIN (SELECT a
FROM pom2
GROUP BY a) b
ON a.a = b.a
GROUP BY a.b
结果是:
+-----+------------------------------+
| b | Group_concat(c ORDER BY b.a) |
+-----+------------------------------+
| 001 | 1,4,0,4,0 |
| 002 | 2,1,2,6,0 |
| 003 | 0,3,2,0,1 |
+-----+------------------------------+