You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将多条数据库记录合并为一行多列展示?

解决方案:用户状态按日期分组列转行统计

根据你的需求,我们可以用两种常见的SQL写法来实现目标格式,不需要复杂的LEFT JOIN:

通用写法(支持所有关系型数据库)

用CASE WHEN配合聚合函数直接分组统计,逻辑清晰易理解:

SELECT
    create_date AS 日期,
    -- 统计当日待审核用户数
    COUNT(CASE WHEN status = '待审核' THEN 1 END) AS 待审核数,
    -- 统计当日通过用户数
    COUNT(CASE WHEN status = '通过' THEN 1 END) AS 通过数,
    -- 统计当日拒绝用户数
    COUNT(CASE WHEN status = '拒绝' THEN 1 END) AS 拒绝数
FROM user_info
-- 按日期分组
GROUP BY create_date
-- 按日期排序
ORDER BY create_date;

也可以用SUM替代COUNT,效果完全一致:

SELECT
    create_date AS 日期,
    SUM(CASE WHEN status = '待审核' THEN 1 ELSE 0 END) AS 待审核数,
    SUM(CASE WHEN status = '通过' THEN 1 ELSE 0 END) AS 通过数,
    SUM(CASE WHEN status = '拒绝' THEN 1 ELSE 0 END) AS 拒绝数
FROM user_info
GROUP BY create_date
ORDER BY create_date;

简洁写法(适用于SQL Server、Oracle等支持PIVOT的数据库)

如果你的数据库支持PIVOT语法,可以用更简洁的方式实现:

SELECT
    create_date AS 日期,
    [待审核] AS 待审核数,
    [通过] AS 通过数,
    [拒绝] AS 拒绝数
FROM (
    -- 子查询获取基础数据
    SELECT create_date, status
    FROM user_info
) AS SourceTable
-- 按status字段做行转列,统计每个状态的数量
PIVOT (
    COUNT(status)
    FOR status IN ([待审核], [通过], [拒绝])
) AS PivotTable
ORDER BY create_date;

补充说明

你之前尝试LEFT JOIN未成功,通常是因为多表JOIN时没有正确处理分组逻辑,或者关联条件导致数据重复/缺失。上面的两种方法都直接基于原表做聚合统计,不需要额外关联表,能避免这类问题。

内容的提问来源于stack exchange,提问作者samg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 04:12:10