[英]Using group_concat With a Condition: Display 0 if Values are Not Equal
我只想水平显示列字段,但也要为其设置条件。 如果不满足条件则显示零。
示例问题:找到PAYCODE 912和686并显示金额,如果不可用,显示0
我的表
员工 | 支付码 | 数量 |
---|---|---|
1 | 912 | 1 |
1 | 123 | 3 |
2 | 912 | 5 |
2 | 686 | 7 |
3 | 111 | 4 |
Output 必须是:
员工 | 数量 |
---|---|
1 | 1,0 |
2 | 5,7 |
3 | 0,0 |
到目前为止我的代码:
SELECT
EMPLOYEE,
GROUP_CONCAT(DISTINCT CONCAT(
IF(PAYCODE = '912', AMOUNT, '0'),
IF(PAYCODE = '686', AMOUNT, '0'))
SEPARATOR',') as AMOUNT
FROM
my_table
注意:类似员工没有重复的工资代码。 例如两个 912 支付码
我认为交叉连接方法应该在这里工作:
SELECT e.EMPLOYEE,
GROUP_CONCAT(COALESCE(t.AMOUNT, 0) ORDER BY e.PAYMENTTYPE DESC) AS AMOUNT
FROM (SELECT DISTINCT EMPLOYEE FROM my_table) e
CROSS JOIN (SELECT '912' AS PAYMENTTYPE UNION ALL SELECT '686') p
LEFT JOIN my_table t
ON t.EMPLOYEE = e.EMPLOYEE AND
t.PAYMENTTYPE = p.PAYMENTTYPE
GROUP BY e.EMPLOYEE;
e
和p
子查询之间的交叉连接生成所有员工/付款类型的利息组合(仅类型 912 和 686)。 然后,我们将 join 留在您的表中以输入金额,如果缺少,我们将改为报告 0。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.